Caso de Estudio Ágil (3/5): Planificar el primer Sprint
May 18, 2021

Tercera entrega de la traducción capítulo capítulo 23 del libro Agile Estimating and Planning, de Mike Cohn. En el post anterior, el equipo del proyecto Havannah había escrito 32 historias de usuario, que tenían un tamaño de 146 puntos en total.
En este post, los miembros del equipo dedican dos semanas a terminar otro proyecto mientras la analista Diana comienza la investigación de mercado con una encuesta a potenciales compradores. Al cabo de las dos semanas, el equipo se vuelve a reunir con Carlos, el coach en métodos ágiles, para planificar la primera iteración y comprometerse como equipo para terminar las historias más prioritarias. El resultado es un compromiso firme del equipo sobre 4 historias que miden 18 puntos.
¿Quiere saber cómo se planifica esta primera iteración?

–¿Qué hacemos ahora? Necesitamos trabajar dos semanas más en Deep Black & White antes de entregárselo al distribuidor –dijo Francisco.
–Mientras los demás trabajan en ello, yo voy a entrevistar a algunos compradores potenciales de Havannah –dijo Diana–. Quiero saber qué funcionalidades son las más importantes.
–¿Te llevará mucho tiempo?
–No, habré terminado antes de dos semanas –dijo Diana–. Reunámonos otra vez entonces, justo después de entregar Deep Black & White y antes de que Francisco nos invite a comer para celebrarlo.
–Suena genial. Me encargo de organizar la comida. ¿Unas hamburguesas, Diana? ¿O tiramos la casa por la ventana con unas pizzas?
Preparando la Investigación de Mercado
Al día siguiente, temprano por la mañana, Diana se puso a preparar la encuesta que debería enviar a los potenciales compradores del juego. Francisco le había pedido una reunión para saber cómo iba a priorizar las funcionalidades. Como responsable de productos, Francisco tomaría las decisiones finales, pero Diana sabía que él confiaría mucho en su investigación. Quería estar bien preparada antes de reunirse con él. Cuando llegó Francisco, Diana casi había terminado la encuesta. –Buenos días, Diana –saludó Francisco a la analista–. ¿Podremos reunirnos finalmente durante la mañana? –Por supuesto. He venido pronto para terminar la encuesta que quiero enviar. Me gustaría enseñártela. –Adelante –dijo Francisco acercando una silla–. Cuéntame qué tienes. –He impreso esto hace media hora –dijo Diana, dándole una copia de la siguiente tabla–. He añadido algunas preguntas más, pero en la copia tienes suficiente para hacerte una idea. Francisco revisó la tabla que le había pasado Diana.


Planificando la Iteración (Sprint Planning)
–Entonces, ¿qué vamos a desarrollar primero? –preguntó Rosa. –Quiero empezar con el motor de movimientos –dijo Alberto– es nuestro mayor riesgo. –Ninguna objeción por mi parte –dijo Santiago, el otro programador del equipo–. ¿Hay algo en que podamos ayudar, Alberto? Normalmente, todo lo que se refiere a inteligencia artificial es cosa tuya. –Sí que hay cosas que podéis hacer. Gracias –dijo Alberto–. Me ayudaría mucho porque me preocupa el nivel de rendimiento que debería presentar el motor fuerte. –Bien, comencemos por la historia Como jugador, puedo jugar contra un motor débil que reconozca solo anillos. ¿Es esa la que quieres hacer primero, Alberto? –preguntó Diana. –Sí. Lo primero que tendríamos que hacer es programar las clases que controlan el estado del tablero, de quién es el turno, y cosas así. Santiago, aquí tú puedes ser de gran ayuda. –De acuerdo. ¿Cuánto crees llevará? ¿Un par de días? –Un par de días intensos. Digamos 16 horas –respondió Alberto. –Alberto, queremos apuntar cada tarea en una tarjeta. Escribe eso en una tarjeta y apunta 16 horas para que no olvidemos la estimación –dijo Carlos. Alberto escribió en una tarjeta: Codificar las clases de gestión de estados (16 h). –¿Pongo mis iniciales para recordar que es mi tarjeta? –No. Aunque parece que tú vas a ser quien la haga, es mejor si no asignamos trabajos a personas concretas por ahora. –Yo voy a tener que hacer las pruebas –dijo Paula–. No llevará mucho, pero es el primer código de programación de este proyecto y quiero asegurarme de que las configuro bien. Digamos que las pruebas llevarán 10 horas. –escribió otra tarjeta con el texto: Escribir pruebas automáticas para las clases de gestión de estados (10 h). –Carlos, me dijiste antes que tengo que descomponer mi trabajo en partes más pequeñas –dijo Alberto–. No puedo decir simplemente que escribir el motor de movimientos llevará 2 semanas, ¿verdad? –No, no puedes. Al identificar tareas, queremos que ocupen entre 1-16 horas. Idealmente, habría que poder terminar una cada día, lo que significa que en media no deberían superar las 5-6 horas, porque siempre hay otras cosas que hacer cada día. –En ese caso –dijo Alberto– La forma de programar esto sería primero tener un motor de movimientos que pueda poner fichas en 6 hexágonos seguidos, sin oponente que lo impida. Haré que comience en un lugar aleatorio del tablero y haré un anillo en 6 movimientos. Después, lo programaré para que haga un anillo incluso si el oponente intenta bloquearlo. Después cambiaré a la parte defensiva de anillos. Haré que el motor intente bloquear a otro jugador que intente hacer un anillo. Así es suficiente para esta historia, en mi opinión. –De acuerdo. Escribiré una tarjeta que diga: Hacer que el motor busque un anillo sin bloqueos. Eso es lo que has dicho que harías primero –dijo Santiago. –Eso seguramente ocupa la mayor parte del día. Apunta 6 horas, por favor –dijo Alberto. –Alberto, no te lo tomes a mal, pero tú siempre tiendes a ser optimista al comenzar un nuevo motor –dijo Rosa, la diseñadora gráfica. –Sí, tienes razón. Haz que sea el doble, mejor –dijo Alberto. Santiago tachó el 6 y escribió 12 horas en la tarjeta. Entonces Carlos dirigió la discusión para estimar las otras tareas que Alberto había identificado. –¿Hay otras tareas que no hayamos identificado para esta historia? –preguntó. –Deberíamos incluir tiempo para pruebas –dijo Paula–. Si Alberto me entrega el código resultante de sus tareas, yo puedo automatizar las pruebas inmediatamente después. Cuando encuentre un fallo, el código aún estará fresco en su cabeza y lo podrá arreglar rápidamente. He ido escribiendo las tareas de prueba en estas tarjetas mientras Alberto escribía las suyas de programación. Todavía no he podido estimarlas. ¿Podemos hacerlo juntos ahora? Al terminar con las tareas de la historia Como jugador, puedo jugar contra un motor débil que reconozca solo anillos, ya tenían las siguientes tareas para esta historia:
- Codificar las clases de gestión de estados [16]
- Escribir pruebas automáticas para las clases de gestión de estados [10]
- Hacer que el motor busque un anillo sin bloqueos [12]
- Escribir pruebas automáticas para anillo sin bloqueos [12]
- Hacer que el motor busque un anillo incluso si el oponente hace bloqueos [8]
- Identificar los casos de prueba para intentar hacer un anillo con bloqueos [4]
- Automatizar las pruebas para intentar hacer un anillo con bloqueos [4]
- Hacer que el motor intente bloquear a un oponente que intenta hacer un anillo [12]
- Identificar los casos de prueba para bloquear a un oponente que intenta hacer un anillo [4]
- Automatizar las pruebas para bloquear a un oponente que intenta hacer un anillo [2]


- Francisco
- Alberto (1 día)
- Rosa (2 días)
- Santiago
- Paula
- Diana

- Producir tablero y gráficos simples [4]
- Dibujar tablero vacío [2]
- Hacer click en hexágono añade una ficha del color adecuado [4]
- El ordenador reconoce cuándo una ficha complete una figura ganadora [6]
- Diseñar las pruebas [6]
- Automatizar las pruebas [8]

- El motor sabe buscar un camino de una esquina otra (es decir, un puente) [4]
- Identificar y automatizar las pruebas para diseñar un puente simple [6]
- El motor sabe hacer un puente entre obstáculos [12]
- Identificar las pruebas para hacer un puente entre obstáculos [6]
- Automatizar las pruebas para hacer un puente entre obstáculos [4]
- El motor sabe cuándo desistir de intentar un puente [8]
- Identificar las pruebas para desistir de intentar un puente [4]
- Automatizar las pruebas para desistir de intentar un puente [2]
- El motor sabe bloquear a otro jugador que intenta un puente [4]
- Identificar las pruebas para bloquear a otro jugador que intenta un puente [4]
- Automatizar las pruebas para bloquear a otro jugador que intenta un puente [4]
- El motor sabe elegir entre poner una ficha para intentar un puente o un anillo [16]
- Identificar las pruebas para elegir entre intentar un puente o un anillo [6]
- Automatizar las pruebas para elegir entre intentar un puente o un anillo [2]


- Como jugador, puedo jugar contra un motor débil que reconozca solo anillos [8]
- Como jugador, puedo jugar contra un motor débil que reconozca solo puentes [5]
- Como jugador, quiero que el ordenador reconozca una figura ganadora [2]
- Como jugador, me gustaría ser capaz de jugar contra otra persona desde mi ordenador [3]