Cómo conseguir equipos de trabajo predecibles y ágiles
Uno de los grandes mitos que existe alrededor de las metodologías ágiles, es que al utilizarlas se debe renunciar a cualquier tipo de planificación y a cualquier tipo de previsión de resultados, y esta creencia suele venir dada por una mala interpretación del Manifiesto Ágil, en particular de su cuarto principio “Respuesta ante el cambio sobre seguir un plan”. Este principio no implica que no deba existir un plan, sino más bien que ese plan debe adaptarse a las situaciones que sucedan durante la duración del proyecto
Por tanto es muy importante contar con un plan y una previsión de trabajo, pero también que ese plan se revise de forma continua, y se adapte a cambios que puedan venir por diversas razones (evolución del negocio, aparición de riesgos no previstos, mayor complejidad de la esperada en cierta funcionalidad, etc.) y ganar así mayor agilidad.
Una de las cosas que más me gusta de la filosofía ágil es el poder reconocer que durante todo el proyecto existirá un nivel de incertidumbre que deberá ser tenido en cuenta antes de adquirir compromisos. Cuando un equipo es capaz de interiorizar que la incertidumbre es parte del día a día, y que no nos podemos aferrar a un plan por el mero hecho de cumplirlo, entonces el equipo empieza a trabajar de forma más predecible y ágil. Esto lo he comprobado con mis equipos durante varios años de trabajo con metodologías ágiles.
Equipos ágiles: la importancia de la predictibilidad
Es crucial para un equipo de trabajo ágil poder ser bastante predecible en sus acciones, porque esta predictibilidad genera un alto nivel de confianza de cara al cliente, un ambiente de trabajo muy motivador para cada uno de sus miembros, y un marco de trabajo de confianza a la hora de negociar contratos vinculados a proyectos ágiles. Para el cliente es fundamental que sus proveedores sean predecibles; así podrá adaptar otros procesos y tomar ciertas decisiones vinculadas a los proyectos realizados por ese proveedor.
Dicho lo anterior, es fundamental que se entienda la predictibilidad dentro de un mismo contexto por todas las partes. Cuando hablo de equipos predecibles, me refiero a equipos ágiles que aprenden de sus errores y los tienen en cuenta para mejorar su desempeño, que se adaptan rápidamente a los cambios que surjan, y que dan visibilidad de forma inmediata ante cualquier acontecimiento imprevisto, de forma que todos los involucrados conozcan la situación y se pueda buscar una solución en conjunto de forma ágil y eficaz.
La predictibilidad que suelo inculcar a mis equipos y que suelo poner como visión de trabajo bajo estas metodologías ágiles, es a la que estamos acostumbrados con la previsión del tiempo. Existen diversos métodos para predecir qué tiempo hará en los próximos días, y aunque las predicciones no son 100% precisas, son buenas para que podamos tomar decisiones. Sin embargo, algunas veces ocurren cambios en la atmósfera que hacen que la previsión del día N+3 sea una el día N, pero luego sea otra el día N+2, y allí está la clave, ya que los servicios de meteorología se apresuran a dar visibilidad a esos cambios para que la gente los pueda tener en cuenta en sus planes.
El desarrollo de software es una actividad compleja, una actividad del conocimiento, sobre la que conocemos muchas cosas pero aun así cada desarrollo contiene una serie de incertidumbres similares a las que existen con la climatología. Aquellas empresas y equipos que niegan esta realidad suelen tener mayores problemas para cumplir con sus compromisos y trabajar bajo el método agile.
Para ser predecibles también hay que tener mucha disciplina. Es muy fácil relajarse cuándo creemos que dominamos algo, y entonces es cuando hay más probabilidad de cometer errores, retrasar el trabajo y perder agilidad. Aquí me gusta utilizar como ejemplo las listas de verificación de los pilotos, que deben seguirse al pie de la letra en cada uno de los vuelos, para evitar que cualquier despiste pueda causar un accidente. Es importante que si quieren ser equipos ágiles, tengan listas de comprobación que les permitan evitar errores que afecten su fiabilidad y predictibilidad.
Cosas como el criterio de hecho (done criteria) funcionan muy bien con listas de comprobación. Para las estimaciones también se pueden tener listas de comprobación para saber si se están teniendo en cuenta todos los elementos necesarios. Estas listas deben adaptarse con frecuencia a partir de la experiencia que va adquiriendo el equipo, no deben ser estáticas sino ágiles y flexibles, pues al igual que los planes, deben adaptarse a las situaciones de cada proyecto.
Por tanto, sí se puede tener equipos predecibles con el uso de las metodologías ágiles. Simplemente hay que utilizar las herramientas que se nos dan a disposición (reuniones diarias, desarrollo por iteraciones, pila de producto, reuniones de planificación etc) de forma adecuada para crear un ambiente de trabajo que motive la predictibilidad, ganando así agilidad.
Consideraciones para lograr un equipo predecible
Quiero finalizar con unas reglas básicas que me han servido para conseguir equipos de trabajo predecibles bajo métodos ágiles:
Cuando exista mucha incertidumbre en una determinada funcionalidad, evitar dar estimaciones muy optimistas. Es mejor equivocarse estimando al alza y darle una alegría al equipo porque hemos sido ágiles y hemos terminado antes, que quedarnos cortos y tener que comunicar un retraso y mover funcionalidades (user stories) para otra iteración.
Tener siempre funcionalidades en “el banquillo” que se puedan desarrollar en caso de que las cosas vayan mejor de lo esperado.
Tener las prioridades de las funcionalidades muy bien definidas, para que cuando las cosas vayan peor de lo esperado, seamos ágiles y se identifique rápidamente qué se debe quedar para la próxima iteración.
Dejar siempre un tiempo durante las iteraciones dedicado a imprevistos, un X% de la capacidad del equipo, y ese valor X variará de iteración a iteración dependiendo de diversos elementos (soporte a entregas anteriores, soporte a software en producción, formación de usuarios, etc.). Si al final no ocurre nada, las funcionalidades que están en “el banquillo” deben utilizar esa capacidad.
Dar visibilidad inmediata al cliente de las situaciones imprevistas y de su impacto sobre el desarrollo. Involucrar al cliente en las reuniones diarias es clave para la tomar decisiones ágiles.
Utilizar listas de comprobación en todo aquello que el equipo vaya aprendiendo y que es fundamental para garantizar la predictibilidad.
Algunas de estas reglas han ido apareciendo a medida que los equipos ágiles han ido aprendiendo cómo trabajar juntos. Además no todas funcionan en todos los contextos, por lo que es muy importante que cada equipo, siguiendo la filosofía de ser predecibles y disciplinados, encuentre las reglas básicas que le permitan ser los más predecible posible en el desarrollo de software.