Mostrando entradas con la etiqueta sprint planning. Mostrar todas las entradas
Mostrando entradas con la etiqueta sprint planning. Mostrar todas las entradas

jueves, 16 de agosto de 2012

¿Medir las historias de usuario en puntos o en horas?

Esta es la eterna pregunta que se realiza en el seno de un equipo scrum al comenzar a usar esta metodología. Los integrantes del equipo están acostumbrados a dar sus estimaciones en tiempo y les resulta extraño medir su esfuerzo en puntos.

Entonces, ¿Por qué medir las historias de usuario en puntos? En este post intentaré dar una explicación para que podáis convencer a vuestros compañeros de las virtudes de medir las historias en puntos.

En primer lugar uno de los puntos que la metodología basada en Scrum intenta resolver es poder dar un dato fiable de cuanto puede producir un equipo en el plazo delimitado de un sprint. Y este es un punto importante ya que el trabajo será realizado por el equipo y no por personas individuales. Si tenemos en un equipo tres programadores: un programador que calificaríamos como superior a la media, un programador senior y un programador júnior. Es de esperar que si asignamos la misma tarea a los tres programadores el tiempo para resolverla de cada uno será diferente, por ejemplo:

                 El programador junior resolverá la tarea en H horas.
                 El programador senior resolverá la misma tarea en H/2 horas.
                 Y el programador experto resolverá dicha tarea en H/3 horas.

Cogiendo este ejemplo como premisa, cuando nuestro Product Owner asigne esta tarea al equipo deberemos gestionar las diferentes tareas asignándole una persona en concreto para poder dar una estimación clara de cuantas historias podremos realizar en un sprint. Obviamente esto supone un exceso de gestión que nos devuelve otra vez a las metodologías convencionales. Además nos obligará a asignar las tareas complejas siempre a las mismas personas y esto no ayudará a que el resto del equipo madure y coja confianza.

Bueno, ¿Y cómo nos olvidamos de las horas/hombre y empezamos a medir por puntos?.  Empecemos por tener una escala de puntuación base para cualquier tarea. Normalmente se utiliza los puntos asignados en las cartas de poker planning. Los valores de estas cartas son: 0, 1, 2, 3, 5, 8, 13, 20, 40, 100 e infinito. Hay que tener en cuenta que la puntuación escogida además de darnos una aproximación de cuanto puede costar desarrollar una tarea también lleva un factor de incertidumbre que aumenta a medida que el número de puntos aumenta.
El valor 0 indica que una historia de usuario es muy simple y que puede estar realizada con un esfuerzo mínimo e infinito indica que la historia es tan compleja que no hay manera de saber cuanto se puede tardar en realizarla (en este caso la historia deberá ser troceada en historias más pequeñas con la finalidad de poder medirlas con más detalle)

El paso más adecuado para empezar a cambiar la forma en que medimos nuestro trabajo sería escoger una historia de usuario que todos consideremos como la más simple (por ejemplo realizar un formulario con tres campos) y preguntar a todos los miembros cuantos puntos de esfuerzo asignarían a esta tarea. El programador experto pensará "bueno esto lo puedo realizar en 3 horas", el programador senior pensará "seguro que necesito 4,5 horas para acabar la historia" y el programador júnior pensará "como mínimo necesito 9 horas para tener la historia terminada". Basándose en sus experiencias en horas intentaran hacer su primera traducción a puntos de historia, después de alguna que otra discusión acordarán una puntuación para dicha historia, por ejemplo 2 puntos.

Bien, en ese momento ya tendremos una historia de referencia. Las siguientes historias podrán basarse en ella. El equipo podrá decidir si la siguiente historia es más o menos difícil que la historia que ya ha puntuado y asignarle una puntuación según la escala definida en las cartas de planning poker. Este proceso se irá realizando hasta que el equipo considere que no puede realizar más historias en un sprint. Llegado a este punto el equipo podrá decir cuantos puntos en total realizará durante el transcurso de dicho sprint.

¿Quiere decir esto que el equipo ya está en disposición de medir las historias en puntos? La respuesta es sí y no. Es un comienzo pero los resultados se irán viendo sprint tras sprint. A medida que el equipo vaya utilizando la metodología irá refinando su forma de puntuar las historias y dará una aproximación más certera en sus previsiones. No podemos esperar que el equipo acierte a la primera en sus predicciones pero con la confianza necesaria y el trabajo constante iremos viendo como el equipo evoluciona y progresa.

Con el tiempo la eterna pregunta ¿Pero que es un punto? irá desapareciendo de nuestros sprint planning. El equipo irá adaptando de una forma natural su forma de puntuar. En ese estadío podremos tener la certeza que cualquier historia de usuario será realizada por cualquier miembro del equipo y que el esfuerzo dedicado será el que el equipo puntuó en el momento de valorar la historia independientemente de quién la realice.




viernes, 27 de julio de 2012

¿Qué es SCRUM?

Creo que la primera entrada de este blog, por obligación, debe ser una explicación de qué es Scrum, para que se utiliza y qué beneficios aporta en frente a las metodologías convencionales basadas en desarrollos en cascada.

Para empezar vamos a ver que nos dice Wikipedia sobre SCRUM:
Scrum es un marco de trabajo para la gestión y desarrollo de software basada en un proceso iterativo e incremental utilizado comúnmente en entornos basados en el desarrollo ágil de software.
Aunque Scrum estaba enfocado a la gestión de procesos de desarrollo de software, puede ser utilizado en equipos de mantenimiento de software, o en una aproximación de gestión de programas: Scrum de Scrums.
Bueno, ahora que ya tenemos una definición sobre que es Scrum pasemos a entrar en detalle sobre la metodología.

Primer detalle a tener en cuenta para aplicar Scrum en tu empresa: La dirección de la misma debe estar completamente convencida de que quiere aplicar este tipo de metodología ágil. De no ser así el resultado puede ser cuanto menos decepcionante. La aplicación de metodologías como Scrum requiere un cambio de mentalidad y requiere esfuerzo e implicación. Para empezar requiere que se cambie el modelo de distribución de las personas. Normalmente las empresas están organizadas en departamentos que interactúan entre ellos para realizar tareas complejas. En un ámbiente de metodología ágil las personas se distribuyen en equipos multidisciplinares y autogestionados que actúan como una unidad para llevar a cabo un proyecto asignado desde principio a fin.

Bueno, una vez tenemos una empresa que ha tomado la decisión de trabajar de una forma ágil deberemos montar los equipos necesarios para realizar las tareas necesarias para conseguir los objetivos empresariales. ¿Y cómo formo un equipo Scrum? Pasemos a definir los diferentes roles que deberemos cubrir:
  • Product Owner: Este rol se encarga de priorizar y definir las tareas que el equipo deberá realizar. Es el enlace "formal" entre el equipo y los clientes.
  • Scrum Master: Es el encargado de que el equipo siga las reglas y los procesos de Scrum.  Además ejerce una figura de facilitador ayudando a quitar impedimentos y protegiendo y aislando al equipo de interrupciones externas.
  • Team Member: Cada uno de los miembros del equipo. Cada miembro del equipo comparte la responsabilidad y el objetivo del trabajo que realizan.
Ahora que ya tenemos a nuestros colaboradores organizados por equipos podemos pasar a definir el proceso.
Proceso Scrum
Cuando desarrollamos un proyecto con Scrum, éste deberá ser dividido en espacios temporales que denominaremos iteraciones (sprints en inglés).
Para poder mejorar el proceso, realizar mediciones y responder de una forma ágil al cambio dichas iteraciones deberán estar acotadas en un espacio temporal corto (entre 2 y 4 semanas). Además deberemos asegurar que tras cada iteración el equipo deberá entregar un resultado completo (un paquete de funcionalidades acabadas) o lo que es lo mismo un incremento de producto final que se susceptible de ser entregado con el mínimo esfuerzo al cliente cuando éste lo solicite.

Las acciones que realizará el equipo dentro de una iteración (o sprint) serán las siguientes:
  • Reunión de planificación de la iteración (Sprint Planning Meeting): Esta es la reunión inicial de una iteración. En ella el Product Owner presenta al equipo las diferentes funcionalidades (historias de usuario) que son más prioritarias. El equipo, una vez a resuelto sus dudas sobre las funcionalidades, estimará cuanto esfuerzo será necesario para realizar cada una de ellas. Al final comunicará cuanto trabajo es problable que se realice durante la iteración.
  • Reunión de seguimiento de la iteración (Daily Scrum Meeting): Cada día de la iteración se realizará una reunión a primera hora del día para realizar un seguimiento del trabajo realizado. En dicha reunión cada miembro del equipo deberá responder a las siguientes cuestiones:
    • ¿Qué hice ayer?
    • ¿Qué tengo planeado hacer hoy?
    • ¿He tenido algún impedimento que no me haya permitido alcanzar mis objetivos?
  • Reunión de revisión de la iteración (Sprint Review Meeting): Esta reunión se realiza al final de la iteración. En ella el equipo presentará todas las funcionalidades (historias de usuario) finalizadas durante la iteración a los interesados. También se comunicará que trabajo no ha podido ser finalizado.
  • Reunión de retrospectiva de la iteración (Spring Retrospective): Al igual que la reunión de revisión, esta reunión se realizará al final de la iteración. En ella el equipo (sin la participación del Product Owner) analizará como se ha trabajado y que impedimentos han salido durante la iteración. La finalidad de ello es la mejora continua del equipo. Es importante salir de la reunión con acciones concretas para solucionar impedimentos o mejoras del proceso.
En los siguientes posts iremos desgranando los diferentes aspectos de la implementación de Scrum. ¡Nos vemos en el siguiente post!