martes, 21 de marzo de 2023

Habilidades de Scrum Master: Facilitación

Una de las habilidades principales a desarrollar como Scrum Masters es la de Facilitación.

La Facilitación como disciplina es independiente de la agilidad, y se origina alrededor de 1980 como una manera de resolver patrones tóxicos en reuniones de grupos en todo tipo de organizaciones. 


Algunos de estos anti-patrones incluyen:

  • Asumir que se llegó a acuerdos porque nadie se opuso a una decisión (aunque la mayoría de las personas participantes no hayan tenido la posibilidad de hacerlo)
  • Presencia en la reunión sin posibilidad de participación activa, e incluso sin comprender el propósito de la reunión
  • La pérdida de foco en el objetivo de la reunión, yéndose del tema, incluso dejando fuera de tema a una parte importante de las personas participantes
Como una manera de cambiar esta dinámica, surgió el rol de Facilitadora ó Facilitador.

Al asumir ese rol, nuestras responsabilidades pasan a ser:
  • Previamente a la reunión

    • comprender el objetivo final
    • acordar con la o las personas que convocan que realmente quieren generar participación grupal y aceptar opiniones del resto del grupo
    • diseñar las actividades y tiempos aproximados para lograr el objetivo
    • colaborar en la convocatoria, incluyendo (si es necesario) la explicación de la dinámica de la reunión
    • (mi sugerencia) asegurar que las personas invitadas sientan que pueden NO participar. Esto muchas veces implica un énfasis en que la no-participación es positiva si la persona invitada no siente conexión real con el tema.

  • Durante la reunión

    • Asegurar acuerdos mínimos de trabajo (respeto por todas las ideas, confianza en la inteligencia colectiva, apertura a escuchar posiciones contrarias)
    • Explicar la dinámica y tiempos generales
    • Guiar a través de cada una de las actividades, manteniendo los tiempos previstos
    • Asegurar la participación de todas las personas (para esto se suele trabajar en grupos pequeños y luego hacer puesta en común; canalizar ideas por escrito o diagramas, además de hablando; variar tipos de actividad para mantener el interés, etc)
    • Mantenerse tan neutral como sea posible (porque somos humanos, finalmente) sobre el tema en discusión. Cuando facilitamos, no participamos ni opinamos sobre el tema, y en cambio mantenemos el foco sobre la dinámica del grupo.
    • Inspeccionar la interacción de las personas y adaptar el plan (que no debe ser demasiado estricto) para asegurar el mejor resultado posible.
    • Asegurar la captura de elementos importantes del proceso y de las decisiones finales. Puede ser en formato de fotos, videos, audio, documentos, diagramas, etc.
    • Lograr un cierre ordenado de la reunión, con una instancia mínima de reflexión sobre el funcionamiento general, oportunidades de mejora para próximas reuniones, posibles consecuencias o necesidades posteriores, etc.

  • Después de la reunión

    • Realizar una retrospectiva de la reunión con las personas que la convocaron, más allá del feedback del resto de las participantes.
    • Compilar y preparar los contenidos generados durante la reunión para compartirlo con las personas participantes y otras que necesiten tener información del tema.
    • Evaluar la necesidad de próximos pasos

En el contexto de Scrum, estas mismas responsabilidades se aplican a los eventos dentro del Sprint: Planning, Review y Retrospective.

¿Y la Daily Scrum? Como Scrum Master no es nuestra responsabilidad "facilitar" la Daily. Este evento es de y para Developers. Por supuesto, podemos colaborar en el inicio para que estas personas encuentren su propio formato y estilo hasta que les resulte útil. Más allá de eso, no deberíamos influir en el tema, más allá de evaluar con ellas si están teniendo o no problemas de coordinación, manteniendo el foco en el objetivo del Sprint y encontrando oportunidades de colaboración real. Si alguna de estas cosas no sucede, puede que la Daily no esté funcionando por completo, pero siempre será mejor buscar motivos sistémicos menos evidentes que tratar de ajustar una pieza mecánica, como el formato de la Daily.

Para profundizar más en el tipo de actividades que podemos utilizar en la Facilitación, veremos un modelo y algunos ejemplos en el siguiente artículo: el Diamante de Toma de Decisiones Participativa de Sam Kaner.





miércoles, 15 de julio de 2020

Eventos de Scrum: el Sprint

El Sprint es el ciclo principal de Scrum. Es la misma idea que en otros marcos es llamada Iteración, y en el caso de Scrum, su mayor importancia es que todo lo que Scrum describe está contenido dentro del Sprint.

También es el "timebox" principal que regula todos los demás.

La idea de TimeBox se utiliza en Scrum para el Sprint y todos sus eventos internos, y es lo que me gusta llamar una "restricción creativa". A primera vista parece una limitación, pero nos ayuda a mantener uno de los valores, que es el FOCO. Una vez que decidimos cuánto va a durar el Sprint de nuestro equipo, no podemos cambiarlo, y eso nos obliga a tener que aprender a entregar y organizarnos dentro de ese límite.

Según la Guía de Scrum, el Sprint puede durar un máximo de un mes, aunque en la práctica ya son muy pocos los equipos que mantienen Sprint de un mes, que suena a una eternidad. La duración más popular es la de dos semanas, pero es usual que los equipo más maduros prefieran el Sprint semanal.

Diagrama de un Sprint

La condición inicial para poder iniciar un Sprint es tener el Product Backlog listo para planificar el trabajo de todo el Sprint. Esto implica que al menos los Items del Product Backlog (o PBIs) más prioritarios estén lo suficientemente refinados.

La duración del Sprint es la que afecta a la vez el timebox máximo de cada uno de sus eventos interiores. Pero lo más importante es recordar siempre que todo sucede dentro del Sprint. Desde el punto de vista de Scrum, nada sucede fuera del Sprint.


Preguntas frecuentes acerca de los Sprints

¿Nunca se puede cambiar la duración del Sprint?

Sí, es posible hacerlo, pero con mucho cuidado. 

El motivo no debería ser circunstancial. Lo que no vale es cambiar arbitrariamente, agregando o quitando días por cualquier circunstancia, ni decidiendo en cada Sprint cuánto va a durar.

Personalmente encuentro solamente dos motivos para cambiar (en algún momento de la vida de un producto):
  • Que el equipo intentó con una duración muy corta y no le resulta sostenible. Por ejemplo, intentaron Sprints de una semana y descubrieron que algunos temas técnicos o internos hacen que les resulte demasiado difícil entregar un producto funcionando al final de cada semana. En ese caso, luego de analizarlo en una Retrospectiva, podrían decidir decidir cambiar a Sprints de dos semanas (de ahí en adelante, sin seguir variando todo el tiempo).

  • De forma similar, si el equipo comenzó con Sprints de dos o tres semanas y durante una Retrospectiva deciden que ya están lo suficientemente maduros como para hacer Sprints más cortos y así aumentar la frecuencia del feedback, podrían reducirlo (nuevamente, es importante que estén seguros de que será sostenible, para no tener que volver atrás).
En cualquiera de los dos casos, es importante que antes de cambiar la duración, tanto el motivo como la decisión sea comunicada a los stakeholders principales, más allá del Equipo Scrum, porque para quienes asistan a la mayoría de las Sprint Review, ese cambio de frecuencia es importante.

¿Se puede cancelar un Sprint antes de que termine?

Sí, es posible hacerlo, pero con mucho cuidado.
(No, no es déjà vu, la respuesta es la misma que la anterior. 😄)

Después de más de 10 años trabajando con Scrum, recuerdo presenciar un solo caso de cancelación, y era porque la compañía acababa de ser adquirida por otra, y no se sabía si el producto continuaría existiendo.

Los únicos motivos para cancelar un Sprint es que su Objetivo se vuelva totalmente obsoleto, por un cambio de negocio, mercado o tecnología tan enorme que cambia todo el contexto. Esto sucede muy raramente. Aunque la idea puede venir de cualquiera, la responsabilidad de cancelarlo (comunicándolo a todos los demás) es únicamente del Product Owner.

viernes, 6 de marzo de 2020

Scrum: Incremento de Producto



En el Manifiesto por el Desarrollo Ágil de Software, hoy más conocido como el Manifiesto Ágil, hay 4 valores y 12 principios, uno de los cuales dice:
El software funcionando es la medida principal de progreso.
En Scrum, ese principio está representado por el Product Increment. Es importante notar que Scrum ya no habla de software, pero la definición del incremento en la Scrum Guide dice (mi traducción):
El incremento es la suma de todos los ítems del Product Backlog completados durante un Sprint y el valor de los incrementos de todos los previos. Al final del Sprint, el nuevo incremento debe estar "Terminado", lo que significa que debe estar en condición de ser utilizado y cumplir con la definición de "Terminado" del Equipo Scrum.
Podríamos decir que en Scrum, la principal medida de progreso es el Incremento de Producto funcionando.
Este incremento es entonces, una versión actualizada y funcionando del producto que se entrega al final del Sprint (agregando valor sobre los incrementos previos).

El Product Owner es quien tiene la responsabilidad de decidir si ese incremento se libera al mercado (se pasa a producción, se pone en marcha o su equivalente de acuerdo al tipo de producto), más allá de que sea usable.

Que el Incremento deba estar "terminado" significa que debe poder ser liberado sin trabajo adicional del Scrum Team.

Atención 
La Guía Scrum no especifica qué sucede con esfuerzo adicional fuera del equipo para entregar el producto a su público objetivo. Por ejemplo, en muchas organizaciones el equipo entrega un producto de software terminado, pero para pasarlo a producción el esfuerzo de otras áreas puede ser enorme. La comunidad ágil alienta a trabajar en reducir esa brecha, por ejemplo, a través de prácticas de DevOps (que NO es un rol ni un área, sino un estilo de colaboración entre desarrollo y operaciones).

La Definición de Terminado

La DoD (del original en inglés, Definition of Done) es creada por el Scrum Team com una manera de evaluar si su trabajo en un ítem del Product Backlog ó en el Incremento está completo.
Definición de Terminado
El objetivo de esta definición es brindar transparencia sobre el nivel de calidad que se considera suficiente para entregar el Incremento de Producto.

La definición es dinámica, y a través de los Sprints será inspeccionada y adaptada, en colaboración entre el Scrum Team y los Stakeholders.

Es importante que el Development Team tenga esta definición en cuenta a la hora de determinar cuánto comprometer durante la Sprint Planning. Una buena Definición de Terminado balancea el nivel de calidad esperado con el esfuerzo requerido.

Es común que la definición varíe mucho entre diferentes equipos, ya que depende mucho del tipo de producto, el contexto y la madurez en diferentes aspectos.

Cuando múltiples equipos trabajan sobre el mismo producto, usualmente colaboran para tener una Definición de Terminado mínima, compartida por todos, sobre la que cada equipo puede agregar sus propias condiciones.

Tips

En mi experiencia, es preferible comenzar con una definición humilde pero alcanzable, y trabajar con el Scrum Team en seleccionar qué prácticas pueden elevar el nivel de calidad del producto, priorizándolas. Es usual que esas prácticas tengan una curva de aprendizaje, que hace que el equipo deba inicialmente invertir más esfuerzo en cada ítem.

La buena noticia es que las prácticas de calidad, una vez que tienen impacto, ahorran esfuerzo en la medida en que el producto se vuelve más estable y el equipo las incorpora como propias. En el momento en que el equipo ya está acostumbrado a esa nueva práctica, puede agregar la condición correspondiente como parte de la Definición de Terminado, y comenzar con la adopción de la próxima práctica de calidad que sea más prioritaria.

Para ayudar a pensar en posibles ítems de la Definición de Terminado de un equipo, en Kleer creamos una guía ágil y las DoD Cards,  con ejemplos y sugerencias.

DoD Cards

jueves, 5 de marzo de 2020

Scrum: Sprint Backlog

El Sprint Backlog es el subconjunto de ítems que un equipo "toma" del Product Backlog como compromiso de trabajo para un Sprint, con algunos agregados.
Sprint Backlog
Esta selección de ítems se realiza durante la Sprint Planning, y los agregados que el equipo hace representan la estrategia para cumplir con esos ítems y alcanzar el Objetivo del Sprint y entregar el Incremento de Producto.

La Guía de Scrum no entra en detalle específico de esa estrategia, pero en muchos casos se trata de una desagregación de tareas para cada ítem, de acuerdo a diversas perspectivas como componentes, especialidades, áreas de trabajo, u otras que el equipo determine.

Es recomendable tener en cuenta que aunque cada ítem se descomponga en tareas, el equipo tiene como objetivo principal lograr ítems completos, que ayuden a alcanzar el objetivo, y tiene que evitar caer en la trampa de dedicarse a completar tareas en cualquier orden, según la especialidad de cada uno, sino en colaborar activamente para terminar ítems, respetando el orden de prioridad original.

El Sprint Backlog usualmente se hace visible a través del uso de un tablero, físico o electrónico, y es importante que esté disponible para todos los interesados y permita ver claramente el estado de cada ítem, de manera transparente.

También es recomendable que junto a los ítems del Sprint Backlog, el tablero mantenga altamente visible al menos un elemento de mejora decidido en la última retrospectiva.

Es común que el equipo modifique y complete detalles del Sprint Backlog a medida que avanza en el Sprint, posiblemente como resultado de la Daily Scrum. Todo ajuste tiene por objetivo mejorar las posibilidades de alcanzar el Objetivo del Sprint.


El Development Team es el único que puede alterar el Sprint Backlog, agregando, actualizando o removiendo detalles. El resto del Scrum Team y los Stakeholders sólo tienen acceso a éste para ver el estado de avance, sobre el que pueden pedir más detalles al equipo. En mi opinión no es bueno tomar el estado de actualización del Sprint Backlog como única fuente de información, sobre todo en caso de notar algo fuera de ciertas expectativas. En un ambiente colaborativo como el de Scrum, la comunicación cara a cara siempre brinda detalles que nos dan una visión más clara de las cosas.

miércoles, 4 de marzo de 2020

Scrum: Product Backlog

Para poder desarrollar un producto con Scrum, un equipo necesita tener un Product Backlog.
Product Backlog
Se trata de una lista priorizada de todo lo que el producto debe tener, y representa el entendimiento actual del alcance del producto. Como el Product Backlog es dinámico, a medida que se descubran nuevas características, su contenido irá evolucionando.

Esa evolución se da a través de los Sprints, a medida que:
  • Se pasan ítems al Sprint Backlog, durante la Planning.
  • Se agregan nuevos ítems que sean valiosos para el producto
  • Se eliminen ítems cuyo valor ya no es relevante
  • Se descompongan ítems grandes en otros más pequeños
  • Se cambian las prioridades de los ítems, al reconsiderar su valor actual
Una idea central es que el Product Backlog es la única fuente de trabajo relativa al producto para el equipo. Sus ítems contienen todas las características, funcionalidades, mejoras, correcciones o extensiones que el producto necesite, y por lo tanto, todas se priorizan en conjunto, para ser desarrolladas por el mismo equipo ó equipos de producto.

Cuando un producto es muy grande, el esfuerzo puede distribuirse entre más de un equipo, con un único Product Backlog (y un único Product Owner), que representa la prioridad actual para el producto completo, en vez de prioridades parciales por componentes o áreas.

El Product Owner es el responsable por su contenido, visibilidad y priorización.

El Product Backlog sirve para responder a la pregunta "¿qué es lo próximo a desarrollar?" y aporta una restricción sana a la situación de que los Stakeholders siempre tendrán deseos aparentemente ilimitados para el producto, pero las organizaciones tiene recursos acotados.

Al hacer las prioridades transparentes para todos los involucrados, se habilita la discusión de cómo se distribuye el esfuerzo dentro de la capacidad disponible, siempre con la restricción adicional de la duración del Sprint.

Los ítems del Product Backlog (o PBI: Product Backlog Items) están ordenados entonces por su importancia en cada momento, y los más importantes suelen estar "refinados", es decir que ya están:
  • Con su valor establecido (y ordenados en consecuencia)
  • Divididos en los ítems más pequeño posibles
  • Estimados (el equipo debe saber al menos que puede desarrollar varios en un Sprint)
  • Detallados (suficiente como para que nada se bloquee en la Planning)
Los ítems que tienen menor prioridad (aún lejos de ser considerados en un Sprint o dos) pueden tener menos nivel de detalle, y aún no estar divididos en partes más pequeñas. Casualmente en Scrum diferimos estratégicamente esa tarea, para:
  • Aprovechar todo el aprendizaje previo al momento de analizar un ítem, sobre todo el ver el incremento más reciente del producto, lo que influye muchísimo sobre próximas decisiones.
  • Evitar analizar ítems que pueden variar (o desaparecer)
La actividad de agregar estos detalles al Product Backlog  no es un "evento" sino una tarea permanente del Product Owner, llamada Product Backlog Refinement, que realiza colaborativamente junto a los Stakeholders y resto del Scrum Team.

Product Backlog Refinement

La recomendación de involucramiento del Development Team en esta actividad es que no exceda el 10% del tiempo disponible del Sprint, pero eso es usualmente bastante tiempo.

Más allá de esa recomendación no hay ningún proceso ni límite de tiempo establecido, y cada equipo Scrum decide y mejora continuamente cómo realiza el refinamiento.

Es importante entender que los ítems que se refinan durante un Sprint no son los que ya están en el Sprint Backlog (y por ende, durante la Planning, se fueron del Product Backlog), sino los que siguen en prioridad, y pueden ser incluidos en el próximo Sprint (y un poco más, ya que no se puede predecir con exactitud lo que sucederá en la siguiente Planning).

También es importante, en mi opinión, que las actividades de Refinamiento no se conviertan en una Planning anticipada. Si se baja a demasiado detalle, sobre todo con el Development Team, estaríamos causando una sobrecarga cognitiva, ya que están trabajando en una serie de ítems (el Sprint Backlog actual) y no queremos distraerlos con detalles que pueden quedar para la Planning, cuando ya están liberados y listos para comenzar otro ciclo.