jueves, 28 de diciembre de 2017

Vértigo técnico

Cuando en proyecto de desarrollo de software se ofrece formación tecnológica, tanto si va a usar dicha tecnología en el proyecto como si no se va a usar, el técnico siempre mostrará predispuesto a realizar dicha formación. Es normal, es bueno para el técnico y para el proyecto en general. Pero es muy diferente aprender que producir. Es decir, se puede producir un efecto en la respuesta del técnico que confunda y parezca extraño desde la gestión ya que el técnico puede estar muy dispuesto a formarse pero puede puede mostrar muchas pegas a la hora de desarrollar tareas productivas con lo que ha aprendido. Esto puede parecer contradictorio pero tiene mas sentido de lo que parece.

Desarrollar una tarea productiva tiene asociadas una serie de características que no son técnicas como son:

  • Se le pedirá al técnico una fecha fin.
  • Se le pedirá al técnico una calidad.
  • Se le pedirá al técnico que explique que es la mejor solución.

 y por supuesto es mas fácil para técnico (y para cualquiera) garantizar estos puntos usando la tecnología con la que trabaja siempre que una tecnología que acaba de aprender.

A este efecto lo llamo vertigo técnico.

Como solucionarlo:

  • Mas formación del técnico: para que adquiera mas conocimiento y pueda garantizar todos los puntos anteriores.
  • Selección del técnico: puede que el mismo técnico no quiera moverse de su zona de confort. Si este es el caso se debe considerar la opción de no pedir al técnico que aprenda algo nuevo y seleccionar a otro técnico en su lugar.
  • Comprensión en la gestión: Por parte del gestor hay que entender que una nueva tecnología convierte a un técnico senior en uno junior y no se le puede pedir resultados tan rápido como se hacia antes.     

Documentación Util

Este es un punto donde hay mucha discusión ya que tenemos en el enfoque básico que indica que cuanto mas documentación se haga y cuanto mas detalle tenga esa documentación mejor. Pero este planteamiento es el claro ejemplo de cosas que suenan bien pero en la practica son un fracaso. Por que? vamos a ver los factores que SI hay que tener en cuenta:


  • Tiempo de elaboración: Cuanto mas extensa y mas en detalle sea la documentación mas va a costar redactarla.
  • Mantenimiento: No existe (al menos en el mundo del software) documentación que este bien desde el principio. Ni los pliegos. Cuanto mas extensa y mas en detalle sea la documentación mas va a costar las modificaciones y las ampliaciones.
  • Capacidad de comprensión: la documentación tiene que ser un punto de referencia, debe ser la "CONSTITUCIÓN" del reino del proyecto. Cuanto mas extensa y mas en detalle sea sera mas posibilidad exista de que en algún punto diga una cosa y en otro diga completamente lo contrario (que existan contradicciones).


La documentación de software debe seguir la siguientes reglas:


  • Del axioma "Cuanto mas extensa y mas en detalle sea ..." del punto anterior tampoco saquemos la conclusión de que la documentación debe ser escasa. La documentación en un proyecto de desarrollo de software debe ser precisa y completamente determinista.
  • Debe tener el mayor número de dibujos que expliquen gráficamente lo que se esta explicando con palabras.  
  •  Debe tener un formato fácilmente accesible por todo el mundo. Sea técnico, gestión, cliente, etc.. Olvida los words, excel, etc... Tiene que ser un formato web tipo wiki, blog, etc..

La clave es que cuando algún miembro del equipo pregunte por cualquier cosa se le pueda solucionar "enviandolo" a una url donde esta la documentación precisa que le solucione el problema. 

jueves, 15 de junio de 2017

Reflexiona sobre la complejidad del proceso

Hoy he ido a prepararme un vaso de leche con chocolate y mis pasos han sido lo siguientes ya que me parecieron los mas obvios:

1º He ido a la estantería de los vasos, he cogido un vaso y lo he dejado sobre la mesa que esta debajo de la estantería.

2º He ido a la estantería del chocolate, he cogido el chocolate y lo he dejado sobre la mesa que esta debajo de la estantería del chocolate (a unos dos metros de la estantería de los vasos).

3º He cogido una cuchara, he ido donde estaba el chocolate, he cogido una cucharada de chocolate y he ido a verterlo en la leche.

Cuando me lo estaba bebiendo se me ha pasado por la cabeza: QUE MAL LO HE HECHO!!! He recorrido dos metros con una cuchara llena de chocolate (se podría haber vertido) cuando si hubiese dejado el chocolate al lado del vaso verter el chocolate en el vaso habría sido inmediato (gano  tiempo y esfuerzo).

Es una tontería pero si analizamos cuantas veces lo haber hecho en un año te das cuenta la de tiempo y fiabilidad que he perdido.

Este ejemplo tan sencillo ilustra perfectamente lo que pasa en muchos desarrollos de software. Para establecer una dinámica en el proyecto, se empieza con procesos obvios  ya que son fáciles de entender y solucionan rápido un problema. Lo malo es que, con el tiempo, la costumbre se traduce en "para que cambiarlo si ya tenemos un procedimiento" y no vemos la posible gran perdida de tiempo y esfuerzo.

Merece la pena, cuando nos da la impresión de que estamos malgastando tiempo y esfuerzo, en analizar la complejidad de los procesos para ver si pequeños cambios suponen un ahorro.

domingo, 11 de junio de 2017

Criterios de terminado. Definition of done

Existen grandes problemas de comunicación en un proyecto de desarrollo de software. Eso se hace evidente cuanto mas se va avanzando en el desarrollo. Un gran problema de comunicación es no especificar ciertos matices que cada uno de los actores que intervienen en el proyecto interpretan a su manera.

Para evitar los problemas de comunicación merece la pena definir ciertos conceptos que parecen obvios pero que en realidad son muy subjetivos. El primero que hay que definir es el "Definition of done". Cuando una tarea, requisito, desarrollo, etc.. cuando algo esta terminado y se puede pasar a otra tarea? cuando le digo a mi jefe "ya esta" y el entiende lo mismo que yo? etc...

Los criterios no deben ser muy exigentes, ni complejos pero si establecer una serie de pasos que indiquen al implicado en el desarrollo que puede dar una tarea por terminada.

Por ejemplo, se le puede indicar a un programador que una tarea esta terminado cuando:

  1. Has terminado en tu equipo de desarrollo local
  2. Has subido todo el codigo al repositorio
  3. Has compilado la aplicación con tus cambios
  4. Has ejecutado la aplicación con tus cambios
  5. Compruebas que la aplicación funciona correctamente con tus cambios

Puede parecer una tonteria pero merece la pena dejarlo claro, incluso escribirlo en algun lado para que el equipo siempre lo tenga presente.

jueves, 25 de mayo de 2017

Saber escuchar

Saber escuchar es una cualidad que se debe desarrollar. En general vas a tener dos situaciones en las que tienes que escuchar:

- Para gestión de subordinados: Cuando hagas una reunión de seguimiento, vayas al sitio de un trabajador, lo encuentres por el pasillo, etc...


- Para gestión de no subordinados: Cuando te reúnas con otras personas que no son de tu equipo existen ciertas consideraciones que debes de tener en cuenta:

Son personas que tienen prioridades distintas de las tuyas.
Son personas que no tiene porque hacerte caso.
Son personas que quieren algo de ti.

En ambos casos tienes que seguir la misma estrategia: Si tenéis que hablar sobre cualquier tema tu tienes que encarrilar la conversación, es decir sacar el tema a colación, pero que sea el subordinado el que hable. Que hable mas que tu. Si es muchas te das cuenta de muchas cosas: cual es su punto de vista, cual es su forma de plantear las cosas, cuales son sus inquietudes, cuales son sus valores. Ademas cosas mas practicas, cuanto mas hable mas información controlaras y podrás opinar sobre el tema del que estáis hablando con mas información y ademas cometerá fallos que podrás usar para llevar la conversación a donde te interesa.


domingo, 12 de febrero de 2017

Xcode. Desplegar una aplicación en un iPhone

No necesitas pagar la licencia de programador de de Apple para desplegar una aplicación que has programado en XCODE. Tienes que hacer tres cosas:

- En tu cuenta de apple (el apple ID). Indica que eres programador. Esto no cuesta dinero. Lo puedes hacer en el XCODE.
XCODE --> Preferences --> Accounts --> View Details  --> Create iOS developer


- En el proyecto de la aplicación indica que vas a firmar como iOS Developer . Lo puedes hacer en el XCODE

Proyecto --> Build Settings --> Code Singing identity. Indica que todos los apartados Automatic iOS Developer

- Tienes que indicar al iPhone que se fíe del certificado  de programador. Lo puedes hacer en el iPhone en Ajustes --> General --> Gestión de perfiles y dispositivos --> Aplicación del desarrollador


miércoles, 11 de enero de 2017

Participación en el diseño

Un gran problema que es conocido por cualquier desarrollador/jefe de equipo en cualquier desarrollo de software es la falta de implicación en el proyecto. La falta de implicación es mas normal en los programadores ya que no son responsables de la entrega y calidad del software.

Una buena manera de conseguir implicación por parte de los programadores es dejarles participar activamente en el diseño de la arquitectura y del marco del trabajo que se va a seguir en el desarrollo del proyecto. De sobra son conocidas las frases:

 - Si se hubiese pensado bien desde el principio.
 - Tenemos una forma de trabjar poco agil.
 - Etc..

Cuando se empiece con el proyecto, lo primero es marcar una  arquitectura y un marco de trabajo. Para decidir la arquitectura y un marco de trabajo el jefe de proyecto tiene que ser un guia, un mediador, el que tiene la ultima palabra pero no debe ser un llanero solitario. Tiene que ser el conductor de las ideas propias y de todo el equipo.

Lo ideal para que todo el equipo participe del diseño de la arquitectura y un marco de trabajo es mantener reuniones periodicas en la parte inicial del desarrollo para decidir como proceder. Si no disponemos de la posibilidad al principio de que todo el mundo participe se debe hacer en posteriores revisiones del diseño de la arquitectura y un marco de trabajo.

De esta manera, los programadores tendran un sentimiento mas posesion sobre el desarrollo y se veran mas implicados en el desarrollo ya que a nadie le gusta admitir que algo que vio bien en un momento del pasado ahora no es tan bueno.