Las condiciones laborales del desarrollador de software se vuelven precarias cuando el proceso en el cual desarrolla software ignora por completo la naturaleza artística de creación de software y la realidad siempre cambiante de los requerimientos.
Es tan común este dolor entre los desarrolladores de software que desde hace años está circulando este video que expresa las frustraciones cotidianas de los trabajadores del conocimiento.
Discutamos en cada uno de los puntos las herramientas que he usado para solucionar o prevenir estos problemas en las empresas en las que hemos proveído Coaching:
0:13 Estamos en el cuarto mes en un cronograma de cinco meses y recibí los requerimientos finales ayer. (¡Y cambiaron de nuevo!)
Esta es por mucho la queja más popular y dolorosa entre desarrolladores. Sin embargo, antes que entendamos el dolor de los desarrolladores, primero entendamos la naturaleza del software como producto:
- El único momento en el que se tendrá requerimientos finales (estáticos) es cuando el producto ya no tenga que recibir ninguna codificación.
- La naturaleza dinámica de los requerimientos es natural y requiere un proceso orientado a la asimilación indolora de tales cambios que al mismo tiempo asegure una justa compensación.
- Al iniciar el proyecto, una definición de alto nivel de los requerimientos permite que sean: 1) suficientemente generales como para que sean flexibles y 2) suficientemente concretos para definir un alcance contractual.
Esto no significa que estamos destinados a vivir en un completo caos y a merced de caprichos. El concepto de interación (o Sprint como se le llama en Scrum) nos ayuda a manejar esta complejidad:
- Un desarrollo incremental iterativo con frecuentes ciclos de retroalimentación a varios niveles asegura entregas de incrementos de software cada iteración, empezando con la primera iteración. El producto resultado de cada iteración hará que el cliente tenga más criterios para refinar requerimientos y prioridades. Una iteración de dos semanas por ejemplo, hará que el cliente reciba valor después de dos semanas de haber arrancado el desarrollo.
- Aunque al inicio del proyecto se tienen requerimientos de alto nivel, se deben definir los todos los detalles de los requerimientos para la próxima iteración a ejecutarse.
- Los únicos requerimientos que no pueden cambiar son los de la iteración en ejecución. Los únicos cambios permitidos y obligados son aquellos que mejoren el entendimiento de los requerimientos entre el cliente y el equipo de desarrollo. Repito: los requerimientos de la iteración actual no pueden ser aumentados en su complejidad o alcance por el cliente o jefe.
- Si a mitad de la iteración los requerimientos cambian, el equipo simplemente perdió media iteración en términos de tiempo. El equipo no puede entregar la misma cantidad de trabajo en la mitad del tiempo. El cliente o jefe debe asumir y manejar el la pérdida de ese tiempo, no el equipo. Si por motivos de negocio los requerimientos deben cambiar, la iteración se cancela y se planea e inicia una nueva.
- Excepciones razonables: 1) El alcance de una iteración sí puede aumentar en caso que el alcance actual se termine antes de la finalización de la iteración. 2) Se puede sustituir el requerimiento A por requerimiento B en la iteración en curso siempre que el desarrollo de requerimiento A no haya iniciado y que el planeamiento y desarrollo de B tenga el mismo costo que la complejidad de requerimiento A.
- Antes de iniciar la iteración, el cliente o jefe debió haber hecho suficiente trabajo para saber cuáles requerimientos son los que quiere ver funcionando para final de la iteración. De nuevo, estamos hablando de una iteración de dos semanas, si no sabe qué es lo que quiere ver funcionando dentro dos semanas, entonces tiene un problema grave de indefinición de negocio que no debe transmitir al equipo de desarrollo.
0:22 Gasto la mitad de mis días en reuniones sobre cómo tener más trabajo hecho (en lugar de estar trabajando)
Reuniones inefectivas se convierten en un costoso desperdicio. ¡Hágalas efectivas! Piense dos veces antes de convocar a una reunión. Ahora bien, las Reuniones de Retrospectiva son ideales para detectar problemas de rendimiento y definir Puntos de Acción respectivos. El formato y la facilitación de una Reunión de Retrospectiva es vital para su efectividad y lograr los verdaderos niveles de hiper-productividad del equipo. La clave es hacer esta reunión más efectiva, no más larga o más reuniones. También discierna si el problema de rendimiento es falta de capacidades o experticia, si este es el caso, la solución no es más reuniones, la solución es traer al equipo esas capacidades.
0:30 Mi jefe leyó en una revista que los desarrolladores que usan el lenguaje de programación "___" son el doble de productivos. Así que nos compró una copia y cortó nuestro cronograma a la mitad
Scrum define tres roles: Scrum Master, Product Owner y Equipo. El Product Owner define el "qué" quiere construir, el Equipo le informa cuánto costara eso que quiere y define el "cómo" lo hará. El Product Owner establece delimitaciones que obedecen restricciones de negocio como: Debe ser en "tal" plataforma y cumplir con "tales estándares". Cuando el Equipo dice que un requerimiento cuesta "X", el Product Owner no puede decir: "Pues tiene que costar X/2 y se comprometerán a eso". Lo que puede hacer o bajarle la prioridad o seguir conversando con el equipo para ver cómo se disminuye la funcionalidad para que llegue a costar "X/2". Quien se compromete a entregar funcionalidad en las iteraciones dados criterios razonables y consensuados es el Equipo. El Equipo se compromete, el Product Owner nunca compromete al Equipo.
0:49 Todos los días mi jefe cambia de parecer con respecto a qué estamos construyendo
Ver 0:13. Si el problema de fondo es más bien que la visión del producto es cambiante, es un problema de estrategia. Si la visión es cambiante, entonces no se ha definido el valor a crear. Un equipo sin una definición del valor a crear nunca será productivo.
0:56 Papá: Las personas siguen pidiéndome que les arregle el e-mail, así que no tengo tiempo para codificar. Hijo: Mi papá no tiene tiempo para mí
El rol del ScrumMaster incluye el solucionar impedimentos y evitar que distraigan a algún miembro del equipo. El Equipo no podrá cumplir con el compromiso de la iteración si es interrumpido. El Scrum Master es un constante vigilante contra las distracciones de los miembros de equipo, lo cual puede implicar abiertas y francas discusiones con las gerencias por causar retrasos.
1:10 Algunos consultores le dijeron a mi jefe que ellos podían construir nuestra siguiente versión en la mitad del tiempo por la mitad del dinero. Él les creyó pero ellos ya gastaron todo el tiempo y presupuesto y están a medio terminar. Ahora ellos se fueron, y su código es un desastre. Tenemos que arreglarlo y terminar lo que ellos empezaron.
Este jefe de nuevo ignora el criterio de estimación del equipo y se apresura a tercerizar el desarrollo sin determinar la calidad de trabajo que estos consultores pueden hacer. Tercerizar el desarrollo de software es un movimiento estratégico sumamente delicado. Una forma de determinar la calidad del oferente es preguntarle por el historial de métricas Scrum de sus equipos y de las procesos y prácticas ágiles que ya tienen implementados.






















