domingo, 24 de febrero de 2013

Carta de Prácticas Ágiles: Arma tu propio menú ágil

El creciente interés por el enfoque ágil para gestionar el trabajo ha propiciado una enorme cantidad de movimiento intelectual :-), en foros, blogs, cursos, certificaciones, herramientas, etc.. Sin embargo, curiosamente un tema poco tratado hasta ahora ha sido la implantación de métodos ágiles, es decir, cómo llevar a cabo una implantación de prácticas ágiles en un contexto determinado de productos/servicios encargados a un equipo de trabajo. Prefiero hablar de implantación para no entrar en las cuestiones más teóricas de la discusión acerca de adopción o transformación ágil. En este post presentaré mi lista de 42 prácticas ágiles a modo de carta de restaurante para que cada equipo configure su propio menú ágil.

En la siguiente imagen se ilustran dichas 42 prácticas y los métodos ágiles en los cuales se enmarcan (Kanban, Lean Development, Scrum y Extreme Programming). En la imagen queda en evidencia que el interés debería ser aplicar prácticas más que centrarse en un método en particular porque sino estaríamos desatendiendo prácticas que podrían sernos útiles. Son 42 prácticas, ... sí son muchas!, pero se han descompuesto al máximo pensando en su posible aplicación separada unas de otras (aunque obviamente existen relaciones entre ellas), aunque luego en una implantación concreta de prácticas en un equipo podría resultar más adecuado agruparlas en su presentación.


Haciendo click sobre la imagen se puede descargar una diapositiva en la cual se puede ver una etiqueta con el nombre de cada práctica al poner el cursor sobre ella.

Es importante destacar que intencionalmente las prácticas aquí presentadas tienen una descripción genérica, no centrada exclusivamente en el ámbito de desarrollo de software. Esto lo he hecho así para facilitar la lectura y comprensión de las prácticas para gente cuyo trabajo en equipo no está relacionado con el desarrollo y mantenimiento de software, sino con otros tipos de productos, o más aún, no en el ámbito de productos sino en el de servicios (incidencias de infraestructura, tickets de soporte, tramitación de expedientes, etc.). Ya que el interés por métodos ágiles se ha extendido a otros ámbitos me pareció interesante hacer este planteamiento. Las prácticas ágiles son en esencia oportunidades de mejora para equipos de trabajo, independiente del ámbito de su trabajo. Así pues, la gran mayoría de prácticas tienen una sencilla extrapolación a cualquier contexto de trabajo en equipo.

Estas prácticas se incluyen en TUNE-UP Process, nuestro enfoque y herramienta para implantación de agilismo en equipos de trabajo. TUNE-UP Process apuesta por combinar prácticas cogidas desde diferentes métodos ágiles (en lugar de intentar implantar un método ágil específico), y además, promueve una evolución metodológica en lugar de una revolución (ver post ¿revolución o evolución hacia la agilidad?). Por otra parte, hemos desarrollado AGILEV Roadmap, un sitio donde se puede elaborar de forma gratuita una hoja de ruta asociada a la implantación de prácticas ágiles, dicho sitio está basado en las prácticas presentadas en este post, y siguiendo el procedimiento descrito en Agile Roadmap: el primer paso para la implantación de prácticas ágiles.

Haciendo clic en la siguiente imagen podéis acceder a un mindmap donde se muestran las prácticas. Al costado derecho de cada práctica hay un enlace para acceder a una explicación.

Mindmap del Catálogo de Prácticas Ágiles
Contar con una lista de prácticas puede verse como tener la carta de un restaurante y someterse a elegir los que comeremos y en qué orden. Así pues, según los intereses del equipo habría que establecer un conjunto de prácticas (un Improvement Backlog), que se comenzarían a implantar siguiendo un orden pre-establecido. Se debería: realizar un diagnóstico del estado metodológico del equipo, establecer objetivos de mejora, evaluar prácticas respecto de dichos objetivos, y estudiar los desafíos que pueda presentar la aplicación de cada práctica candidata, todo lo cual daría como resultado dicho Improvement Backlog, una lista ordenada de prácticas interesantes para aplicar en el contexto de trabajo de un equipo. Y eso no es todo, cada práctica requerirá una preparación y posible adaptación antes de ser aplicada, muchas de las prácticas también deben considerar apoyo de herramientas.

Las prácticas NO son independientes entre sí. Existen algunas dependencias evidentes, por ejemplo, aplicar refactoring sin tener un buen soporte de pruebas (y ojalá pruebas automatizadas) puede llegar a ser catastrófico :-). Sin embargo, hay muchas otras relaciones de dependencia que conllevan mayor interpretación, me refiero a cuando una práctica favorece en cierta medida la aplicación de otra práctica. Esto ya lo reconocía Kent Beck en Extreme Programming al señalar que mientras más prácticas se apliquen y en mayor profundidad, mejor será el resultado obtenido, pues se produce sinergia entre las prácticas aplicadas.

La implantación de prácticas no es fácil ni inmediata, y es en sí misma un proyecto de mejora continua. En este sentido tiene similitudes con cualquier tipo de proyecto de mejora de procesos, aunque la diferencia remarcable debe ser sin duda que este proyecto de mejora debe y puede hacerse también de forma ágil :-).


Patricio Letelier

jueves, 7 de febrero de 2013

Actividad: Hard Choices. Ilustrando el concepto de Deuda Técnica


Este juego es una adaptación del juego original Hard Choices (desde este enlace se puede descargar el tablero de juego y las tarjetas). Con el planteamiento descrito a continuación se requieren unos 40 minutos para realizar la actividad. Se trata de una sencilla e interesante actividad para ilustrar el concepto de Deuda Técnica. Pero más allá de dicho propósito, utilizo esta actividad para motivar al inicio de un curso o seminario, remarcando lo diferente que es una estrategia de trabajo en equipo respecto de una estrategia de trabajo individual.  

Materiales
  • En cada tablero podrán jugar 4-5 personas. Prever suficientes tableros según la cantidad de participantes. Imprimir los tableros de juego. Recortar las tarjetas de herramientas y puentes.
  • Conseguir 2 dados y 5 fichas para los jugadores, todo ello para cada tablero.
  • Asegurarse que los participantes en cada tablero podrán disponer de una mesa alrededor de la cual sentarse para jugar.
  • Usar estas diapositivas para presentar el juego y hacer los comentarios finales.
Preparativos
Establecer grupos de 4-5 jugadores en cada tablero. Proporcionarles dos dados, fichas y tarjetas de herramientas y puentes. Explicar brevemente las siguientes reglas del juego, SIN detallar el objetivo.
  • El primero en llegar a la meta obtiene 5 puntos, el segundo 2 y el tercero 1.
  • El juego termina cuando hayan llegado tres jugadores a la meta, el resto NO cuenta.
  • No es necesario caer exactamente en la celda de la meta.
  • Cuando se cae en una celda de herramienta se recoge una tarjeta de herramienta. Las tarjetas de herramienta darán un punto adicional en el cómputo del jugador.
  • Cuando se cae o pasa por un puente se coge una tarjeta de puente. Las tarjetas de puente restarán un punto en el cómputo del jugador.
  • Un jugador en su turno puede cambiar de dirección, es decir, puede devolverse (para intentar caer en una celda de herramienta).
  • Caer sobre la ficha de otro jugador le devuelve al inicio :-).

Primera Ronda
  • No poner tiempo límite pero ir “presionando” a los equipos más rezagados.
  • Al terminar pedir a los jugadores que obtengan su puntaje sumando los puntos por llegar a la meta con los puntos de tarjetas de herramientas y restando los puntos de puentes. 
  • A continuación preguntar en general quién ha ganado. Lo normal es que levante la mano el jugador que tiene más puntos en cada equipo. Hacedles saber que la pregunta tenía truco puesto que lo que realmente se quiere saber es qué equipo ha ganado. Para determinar el equipo ganador los tres que llegaron a meta de cada equipo deben sumar sus puntos. Insistir en que aquellos que no llegaron entre los tres primeros no deben contabilizar sus puntos. En este momento hay que remarcar que no sospechaban que estaban realizando un trabajo en equipo y compitieron entre ellos mismos, probablemente perjudicando el desempeño del equipo. 

Segunda Ronda
  • Advertir que en esta ocasión tendrán solo 6 minutos para llegar a la meta, cumplido el tiempo aunque en un equipo no hayan llegado tres jugadores, se terminará la partida. 
  • Ofrecer un minuto para que cada equipo piense su estrategia para esta segunda partida, sabiendo ahora que se trata una competición entre equipos.
  • Sugerencia: utilizar este cronómetro web, iniciar una cuenta regresiva de 6 minutos y hacerla visible a todos los equipos. 
  • Solicitar la contabilización de puntos de cada equipo y comparar con los puntajes obtenidos en la primera ronda (deberían haber mejorado).

Comentarios Finales
  • Preguntar por las estrategias seguidas por cada equipo. ¿alguno de ellos decidió jugar solo con tres jugadores?.
  • Remarcar los tres aspectos que suelen cambiar en la actitud de los jugadores. En la primera ronda: relajación, apatía y egoísmo, y correspondientemente en la segunda ronda tensión, colaboración e incluso sacrificio (si alguien dejó de jugar).
  • Preguntar por las analogías de este juego con un proyecto de desarrollo de software. El tiempo establecido es el plazo del proyecto. Hay muchas formas de llegar a la meta. Recoger herramientas es aplicar buenas prácticas de ingeniería de software, coger puentes o atajos es saltarse dichas buenas prácticas o no esforzarse por conseguir una arquitectura ideal. Sin embargo, para el éxito del proyecto puede que no sea tan determinante una buena arquitectura respecto de entregar un producto que cumple con las expectativas del cliente y en el plazo oportuno. No se puede estar eternamente cogiendo herramientas, pero tampoco tiene sentido llegar a la meta con un producto muy pobre en arquitectura lo cual puede ocasionar problemas.
Usando la última transparencia comentar lo siguiente:
  • Explicar el concepto de Deuda Técnica. Se incurre en Deuda Técnica al entregar un producto que no tiene una arquitectura ideal, lo cual podría dificultar sus futuras modificaciones, pruebas y reutilización. Esta deuda nos obligará a pagar intereses cada vez que nos veamos enfrentados a cambios en el producto. La deuda la saldaremos cuando nos decidamos a realizar la refactorización necesaria para mejorar la arquitectura. La paradoja es que “ojala tuviésemos ese problema pues podría ser un síntoma que el producto ha tenido éxito y nos están pidiendo mejoras”, además, “todo producto exitoso requerirá mantenimiento” pues el cliente estará interesado en mejoras, adaptaciones, integraciones, etc. 
  • Remarcar que una estrategia de equipo es diferente a una individual.
  • Remarcar que las condiciones de un proyecto son cambiantes. Cuando el tiempo comienza a apretar sube la tensión y hay que tomar decisiones, especialmente si estamos lejos de la meta.