Scrum - 10 Estrategias Útiles para Descomponer Historias de Usuario Grandes
Scrum - 10 Estrategias Útiles para Descomponer Historias de Usuario Grandes
Scrum - 10 Estrategias Útiles para Descomponer Historias de Usuario Grandes
grandes
Si en algún momento nos encontramos frente al reto de que nuestro equipo Scrum
cuente siempre con un Backlog adecuado para atender los items especificados, es
necesario que todos puedan contribuir en su mantenimiento y actualización. A
continuación se encuentra la versión traducida al castellano del artículo “10 useful
strategies for breaking down large User Stories (and a cheatsheet)” escrito por
Christiaan Verwijs.
Los equipos que han llegado a dominar Scrum saben que la clave del éxito radica
disponer de un Product Backlog que se encuentre siempre disponible para su uso, con
un refinado incremental y en el cual el trabajo este desglosado. Los equipos prefieren
Sprint Backlogs con varios ítems pequeños (funcionales) en lugar de solamente
algunos ítems grandes. Los ítems pequeños mejoran el flujo y reducen el riesgo de
que el Sprint falle. En este artículo, explicaré por qué es importante la descomposición
del trabajo y por qué debería ser hecho de manera transversal a la funcionalidad, en
lugar de considerar características técnicos. A continuación daré a conocer ofreceré 10
estrategias útiles que los equipos Scrum experimentados usan para descomponer el
trabajo.
Para el resto de este artículo, usaré “Historias de Usuario” para indicar ítems
funcionales en el Product Backlog. Hay que tener en cuenta que las “Historias de
usuario” están destinadas a ayudar para que los equipos piensen en términos de
funcionalidad, en lugar de técnicos. Los términos técnicos no son requeridos.
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
hacerlo “sobre la marcha”. Afortunadamente, la comunidad ágil ha ideado una serie de
estrategias útiles para desglosar el trabajo en trozos más pequeños.
Aunque un desglose horizontal de las historias de los usuarios dará como resultado
elementos más pequeños, limita severamente la capacidad de un equipo para entregar
software que funcione, evitar los cuellos de botella y priorizar el trabajo. Por lo tanto,
aumenta el riesgo de fallar el Sprint. Es una mala idea.
En Scrum, una descomposición vertical es más útil, en el que las Historias de Usuarios
se dividen en otras más pequeñas (en lugar de tareas técnicas). Si las historias de los
usuarios se desglosan verticalmente, se dividen de tal manera que los ítems más
pequeños aún resultan en software que funciona y son demostrables. La funcionalidad
no se dividirá en capas técnicas o tareas, sino en capas funcionales. Entonces, si la
historia del usuario es “Como cliente quiero pagar mi pedido, para obtener mis
productos”, se puede dividir en historias de usuarios más pequeños como las
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
siguientes “Como cliente quiero pagar por transferencia bancaria, para obtener mi
productos “o” Como cliente quiero pagar con tarjeta de crédito, para que pueda
obtener mis productos “.
Una metáfora nos permitirá aclarar aún más la diferencia. Imagina rebanar un pastel
con capas de crema, fruta y pastel. Si cortara la torta horizontalmente, cada invitado
solo obtendría una porción de pastel, crema o fruta. Estoy seguro de que sus invitados
habrían esperado algo más. Obtener solo una capa del pastel no les permite probar
todo el pastel. Un enfoque más amistoso es cortar el pastel en pedazos verticales,
cada una con un poco de pastel, crema y fruta:
Como cliente,
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
para recibir los productos en mi casa.
Como cliente, quiero iniciar sesión con mi cuenta, de tal modo que no tengo que volver
a ingresar mi información personal cada vez;
Como cliente, quiero revisar y confirmar mi pedido, para poder corregir los errores
antes de pagar;
Como cliente, quiero pagar mi pedido con una transferencia bancaria, para poder
confirmar mi pedido;
Como cliente quiero pagar mi pedido con tarjeta de crédito, para poder confirmar mi
pedido;
Como cliente, quiero recibir un correo electrónico de confirmación de mi pedido, para
tener un comprobante de mi compra;
Al desglosar una gran Historia de Usuario como esta, hemos mejorado nuestra
comprensión de la funcionalidad y nuestra capacidad de estimación. También será
más fácil para un Product Owner priorizar el trabajo. Es posible que algunos pasos en
el flujo de trabajo no sean importantes en este momento y se puedan mover a futuros
Sprints. Tal vez el correo electrónico de confirmación del pedido se pueda hacer a
mano por el momento, o los clientes solo pueden pagar con tarjeta de crédito de
manera inicial. También podría estar bien solicitar a los clientes que vuelvan a ingresar
(temporalmente) su información personal para cada pedido. Sin duda, esto limitará la
funcionalidad de la tienda web, pero permite que un equipo Scrum revise (y tal vez
incluso implemente) la funcionalidad completa al final del Sprint, realiza pruebas y
utiliza el feedback para realizar los cambios necesarios.
Como cliente,
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
Como propietario de la tienda, quiero cancelar automáticamente los pedidos para los
cuales no he recibido el pago en 48 horas, de modo que puedo volver a venderlos a
otros clientes;
Las reglas de negocio a menudo están implícitas, por lo que se necesitarán algunas
habilidades y destrezas analíticas para identificarlas. Puede ser útil emplear otra
estrategia (descrita en la estrategia Nro. 7); ¿cómo se probará la funcionalidad? A
menudo, los casos de prueba implican reglas de negocio importantes. Una vez que se
hayan identificado las reglas de negocio, de nuevo habrá mejorado nuestra
comprensión y capacidad de estimación. El Product Owner puede decidir que algunas
reglas comerciales no son importantes por el momento o pueden implementarse de
forma simplificada. Tal vez está bien por ahora devolver manualmente los productos
no pagados al inventario cuando no se ha recibido un pago dentro de las 48 horas, o
los pedidos se pueden cancelar manualmente. Aún más pragmáticamente, un mensaje
en el sitio explicando que “los pedidos no se envían fuera de los EE. UU.” O que “el
precio mínimo del pedido debe ser de al menos 10 dólares” puede ser suficiente por
ahora. Ahorrará tiempo y dinero necesarios para hacer cumplir esta regla comercial.
La funcionalidad a menudo implica un flujo feliz y uno o más flujos infelices. El flujo
feliz describe cómo se comporta la funcionalidad cuando todo va bien. Si hay
desviaciones, excepciones u otros problemas, se invocan flujos infelices.
Como cliente,
Como usuario, quiero iniciar sesión con mi cuenta, de modo que pueda acceder a
páginas seguras (feliz);
Como usuario, quiero restablecer mi contraseña cuando falla mi inicio de sesión, por lo
que puedo intentar iniciar sesión de nuevo (infeliz);
Como usuario, quiero la opción de registrar una nueva cuenta si no se conoce mi
nombre de usuario, de modo que puedo obtener acceso a páginas seguras (infeliz);
Como propietario del sitio, quiero bloquear a los usuarios que inician sesión
incorrectamente tres veces seguidas, para poder proteger el sitio contra los piratas
informáticos (infelices);
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
preguntas con mayor precisión sobre el valor del negocio y tomar decisiones en
consecuencia.
La mayoría de las aplicaciones web tienen que soportar varias opciones de entrada y/o
plataformas, como computadoras de escritorio, tabletas, teléfonos móviles o pantallas
táctiles. Puede ser beneficioso descomponer elementos grandes según sus opciones
de entrada.
Como miembro del equipo, quiero ver el tablero Scrum en mi escritorio, así sé el
estado del Sprint;
Como miembro del equipo, quiero ver el tablero Scrum en mi teléfono móvil, así sé el
estado del Sprint;
Como miembro del equipo, quiero ver el tablero Scrum en una pantalla táctil, así sé el
estado del Sprint;
Como miembro del equipo, quiero ver el tablero Scrum en una impresión, así sé el
estado del Sprint;
Al desglosar los ítems grandes de esta manera, el Product Owner puede priorizar más
fácilmente qué opciones de entrada o plataformas son más importantes. Es probable
que una versión de escritorio sea suficiente por ahora, mientras que una versión móvil
puede ser empujada a un Sprint futuro. O tal vez la impresión se puede implementar
con una simple captura de PDF por el momento, sin tener que crear una versión
adecuada para la impresión.
Algunas historias de usuarios se pueden dividir en función de los tipos de datos que
devuelven o los parámetros que deben manejar.
Como cliente
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
Existen muchas formas de buscar un producto. Todos estos parámetros potenciales se
pueden considerar y dividir en historias de usuarios más pequeños:
Como cliente quiero buscar un producto por su número de producto, así puedo
encontrar rápidamente un producto que ya conozco;
Como cliente, quiero buscar productos en un rango de precios, para que los resultados
de búsqueda sean más relevantes;
Como cliente quiero buscar productos por su color, para que los resultados de
búsqueda sean más relevantes;
Como cliente, quiero buscar productos en un grupo de productos, para que los
resultados de búsqueda sean más relevantes;
Como propietario de la tienda, quiero agregar nuevos productos para que los clientes
puedan comprarlos;
Como propietario de la tienda, quiero actualizar la información de los productos
existentes, así puedo ajustar los cambios en los precios o la información del producto;
Como propietario de tienda, quiero eliminar productos, así puedo eliminar productos
que ya no tengo en existencia;
Como propietario de tienda, quiero ocultar productos, por lo que no pueden venderse
por el momento;
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
Cuando se presenta esta estrategia, muchos equipos se preguntan si los ítems más
pequeños realmente brindan valor de negocio. Después de todo, ¿de qué sirve crear
entidades solo cuando no puedes actualizarlas o eliminarlas después? Pero tal vez el
Product Owner tiene una cantidad limitada de productos, que la edición o eliminación
se puede hacer en la base de datos directamente. A veces, una operación se puede
implementar fácilmente en una forma simplificada. Eliminar un producto se puede
hacer de dos maneras; puede eliminar completamente el registro y todos los registros
asociados, o puede “eliminar logicamente” un producto. En ese caso, el producto aún
está en la base de datos, pero está marcado como “eliminado”. A veces, uno de estos
enfoques es más fácil de implementar y, por ahora, puede ser “lo suficientemente
bueno”.
Como gerente,
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
pueden traducirse fácilmente en elementos atrasados y agregarse al Sprint o al
Backlog.
Las historias de los usuarios a menudo implican una cantidad de roles (o grupos) que
realizan partes de esa funcionalidad. Tome una historia de usuario para publicar
nuevos artículos en un sitio web de un periódico público:
para que los clientes tengan una razón para regresar periódicamente.
Como cliente, puedo leer un nuevo artículo, para poder informarme de eventos
importantes;
Como periodista, puedo escribir un artículo para que nuestros clientes lo puedan leer;
Como editor, puedo revisar el artículo antes de ponerlo en el sitio, de modo que
podamos evitar errores tipográficos;
Como administrador puedo eliminar artículos del sitio, de modo que podamos retirar
artículos ofensivos;
Como cliente, puedo revisar y confirmar mi pedido, para poder corregir los errores
antes de pagar;
Ejemplo:
Como visitante,
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
Una historia como esta se puede dividir en diversos grados de optimización:
Como visitante, quiero buscar hoteles basados en un radio desde una dirección, de
modo que pueda restringir mi búsqueda;
Como visitante, quiero ingresar el código postal para completar automáticamente la
dirección, así no tengo que ingresar la dirección completa manualmente;
Como visitante, quiero usar mi ubicación (GPS) para buscar en el vecindario, así no
tengo que ingresar la dirección manualmente;
Como visitante quiero obtener de inmediato los hoteles más buscados en el
vecindario, mientras que otros hoteles se cargan en segundo plano, por lo que
obtengo resultados más rápidamente;
Permítanme ser claro en una cosa: se supone que esta estrategia no debe usarse
como una excusa para escribir “código malo” ahora y “código mejor” en el futuro. Los
equipos Scrum siempre deben esforzarse por ofrecer un código que se pueda
mantener, (automáticamente) probado y bien escrito. Esta estrategia se refiere a la
optimización funcional. En cualquier caso, un Product Owner puede priorizar más
fácilmente estos ítems. Quizás sea suficiente por ahora permitir que los visitantes
busquen por dirección (y un radio), mientras que en el futuro se implementa una
funcionalidad más compleja (autocompletado, GPS).
En una variante de la estrategia Nro. 4, las historias de usuarios para aplicaciones web
a menudo necesitan trabajar en una amplia variedad de plataformas de
navegación. Los navegadores modernos tienden a ser más compatibles con los
estándares y más fáciles de desarrollar, mientras que los navegadores más antiguos a
menudo requieren hacks y personalizaciones para que todo funcione correctamente.
Ejemplo:
Como cliente
Como cliente, quiero ver los detalles del producto en un navegador moderno y
compatible con los estándares, así sé si quiero comprarlo;
Como cliente, quiero ver los detalles del producto en IE7, así sé si quiero comprarlo;
Como cliente, quiero ver los detalles del producto en un navegador de texto, por lo que
sé si deseo comprarlo;
Aunque sin duda sería preferible ofrecer esta funcionalidad con soporte completo para
todas las versiones de navegador, existen escenarios donde este desglose es factible.
Tal vez la gran mayoría de los visitantes utilizan navegadores modernos, que
requieren menos esfuerzo para soportar navegadores antiguos (que no sean un
warning). O tal vez la aplicación se ejecuta en una red interna donde todos los
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/
usuarios usan Internet Explorer 7. De nuevo, esto permite que el Product Owner
priorice, y ayuda al equipo a dedicar primero tiempo y esfuerzo a la funcionalidad más
importante.
Otras estrategias
Existen otras estrategias que son útiles al desglosar historias de usuarios grandes:
No existe una regla clara sobre cuán pequeña debería ser la Historia de Usuario. Esto
depende en gran medida de la duración de los Sprints, la naturaleza de la aplicación y
el tamaño y la experiencia del equipo. A menudo se necesita varios Sprints para que
un equipo Scrum pueda descubrir el punto óptimo.
Mi experiencia me dice que los equipos deben esforzarse por agregar al menos entre
5 historias en un Sprint de una semana (una por día). No tienen que ser del mismo
tamaño, pero no deberían ser demasiado grandes por sí mismos. Cuando los equipos
usan la estimación de Story Point, a menudo acuerdan el tamaño máximo para que
una historia llegue al Sprint. De modo que una historia solo se tomará en el Sprint si es
menor a (digamos) 8 puntos. Esto también le da un objetivo claro al proceso de
refinamiento del próximo trabajo.
http://marcoviaweb.com/estrategias-para-descomponer-historias-de-usuario/