Este post forma parte de una serie de cuatro artículos sobre aprendizajes en la utilización de Programación Extrema. En el primer post, comentaba sobre el manejo de Versiones con Fecha Fija de Release.
Una sola tarea a la vez
Este me parece una de los aprendizajes más contra-intuitivos. Por lo regular uno piensa que mientras más tareas le asignes a una persona más posibilidades hay que se terminen las cosas. Cuándo se distribuyen las tareas tenemos la sensación que ya hemos avanzado y que estamos más cerca de terminar.
En mi experiencia resulta todo lo contrario.
A nível personal cuándo una persona tiene varias asignaciones por desarrollar termina menos cosas que recibiendo una asignación por vez. Creo que tiene que ver con la sensación de angustia que se genera al tener muchas cosas pendientes.
A nível grupal el efecto es aún más perverso; primero que la distribución del trabajo se realiza al principio del ciclo cuándo todavía no se tiene claro cuánto tiempo toma cada tarea. Entonces una persona podría acabar con mucho más trabajo que otras.
El grupo no se concentrar en cerrar sino en abrir. Lo más importante termina siendo “abrir” o comenzar con la nueva asignación en vez de concentrarse en “cerrar” la única que tenemos en cada momento.
En nuestro caso cada nuevo desarrollo es cerrado por el representante del usuario; cuándo un desarrollador tiene varias tareas pendientes sucede un ciclo totalmente antiproductivo. El ciclo se resume en estos pasos:
1) Desarrollador termina primera versión de una funcionalidad y la asigna al rep del usuario
2) Rep del Usuario está haciendo otras cosas, y le pide tiempo para hacer las pruebas
3) Desarrollador “abre” la próxima funcionalidad y comienza a trabajar. Saca de su mente el problema anterior e introduce este nuevo problema.
4) Rep del Usuario, realiza las pruebas y hace unas correcciones.
5) Desarrollador no quiere dejar de trabajar en su nueva funcionalidad (en la que ya está inmerso) y pide tiempo para realizar las correciones.
6) Vuelve al punto 1)
Despues de mucha energía y tiempo invertido se tienen muchas funcionalidades “abiertas” y ninguna cerrada.
Para romper con esta situación la solución es muy sencilla: Una sola asignación a la vez. Esta regla sencilla requiere mucha disciplina pero se gana full.
El ciclo queda así:
1) Desarrollador termina primera versión de una funcionalidad y la asigna al rep del usuario
2) Rep del Usuario está haciendo otras cosas, y le pide tiempo para hacer las pruebas. El tiempo solicitado se minimiza por que se entiende que el desarrollador no va a comenzar con más nada)
3) Desarrollador realiza pruebas de su funcionalidad, exactamente igual a como lo haría el rep del usuario. Si tiene errores corrige de una vez.
4) Rep del Usuario realiza pruebas, y se consigue con una versión más estable. Hace recomendaciones al desarrollador
5) Desarrollador termina correcciones y se cierra la funcionalidad.
6) Vuelve al punto 1)
Cada vez que se ejecuta este ciclo se tienen funcionalidades cerradas y la sensación de avance que a todos nos sube el auto estima. Y cada vez que cerramos tenemos ganar de seguir cerrando.
En la próxima parte, hablaré sobre como mantener Foco en el cierre.