Ir al contenido
wannacode

Dividir una historia grande

En resumen: Una historia grande se corta en vertical: cada trozo atraviesa todo lo que necesita y da algo que alguien puede probar. Los patrones indican por dónde cortar: por pasos, reglas, datos, complejidad, calidad u operaciones. Una capa (frontend, backend, base de datos) no es una historia.

Problema

Tres semanas y nada que enseñar

La historia es «Como cliente quiero devolver un producto y recuperar mi dinero». Es grande, así que el equipo la reparte: una persona construye la pantalla de devoluciones, otra los registros de la base de datos, una tercera el reembolso.

A las dos semanas la pantalla está lista, pero no hace nada. La base de datos está lista, pero nadie puede verla. El dueño pregunta «¿puedo ver una devolución?» y la respuesta es «todavía no». En la tercera semana todo se conecta, y es entonces cuando QA descubre que los 14 días se cuentan desde el pedido, no desde la recepción de la mercancía.

Los trozos eran pequeños. Pero ninguno se podía probar por sí solo.

La idea

En vertical, no por capas

Piensa en la historia como una tarta de capas: pantalla, procesamiento, base de datos. Dividir por capas corta la tarta en horizontal. Te queda una capa entera de nata, y nadie puede comerla como tarta.

Una buena división corta en vertical: cada trozo tiene tanto de cada capa como necesita y da algo que alguien puede probar. En las devoluciones, el primer trozo vertical es «el cliente solicita una devolución dentro de los 14 días desde que recibió la mercancía». Es pequeño. Pero el dueño lo ve la primera semana, y QA puede comprobar enseguida el límite de los 14 días.

Esto se llama dividir historias (story splitting): una historia grande se corta en otras más pequeñas, cada una de las cuales sigue siendo una historia según INVEST.

Más precisamente, para curiosos

La metáfora de la tarta es antigua: Bill Wake ya la usa en su artículo sobre INVEST. Un trozo así se llama corte vertical (vertical slice), y a dividir también se le llama cortar en rebanadas (slicing).

La idea

Por dónde cortar

No hay un único corte correcto, pero hay patrones que aparecen una y otra vez. Aquí van seis, con la tienda:

Patrón Cuándo encaja En la tienda
Por pasos del flujo de trabajo la historia es un proceso con varios pasos devoluciones: solicitud, paquete de vuelta, almacén, dinero
Por reglas de negocio una acción, muchas reglas el importe final: envío, código promocional, fidelidad, cuál se aplica
Por variaciones de los datos el mismo camino, datos distintos un producto con una talla, después con talla y color
El caso principal primero hay un caso principal y muchas complicaciones búsqueda por nombre, después filtros y sugerencias
Primero que funcione, después la calidad un requisito de velocidad o de carga el pago, después el pago con 2000 clientes a la vez
Por operaciones «gestionar» esconde varias acciones códigos promocionales: crear, ver, cambiar, detener

La primera pregunta es: ¿por qué es grande la historia? ¿Por los pasos, las reglas, los datos? La respuesta sugiere el patrón.

Más precisamente, para curiosos

Los patrones de aquí siguen la lista que más se cita en la práctica: «Patterns for Splitting User Stories» (2009) de Richard Lawrence. Otro conjunto muy conocido es el SPIDR de Mike Cohn: Spike, Paths, Interfaces, Data, Rules.

Al último patrón se le llama a menudo CRUD, de create, read, update, delete. En la tienda «eliminar» se convierte en «detener», y verás por qué en el ejercicio.

Pruébalo

¿Qué patrón?

1. «Como cliente quiero comprar ropa con tallas y colores.» Hoy la tienda solo vende productos en una talla.
2. «Como cliente quiero encontrar productos buscando.» El dueño piensa en búsqueda por nombre, por precio, por talla, con sugerencias mientras escribes.
3. «Como cliente quiero que el pago funcione también en las rebajas, cuando 2000 clientes compran a la vez.» Todavía no hay pago de ningún tipo.
4. «Como cliente quiero cancelar un pedido.» Se permite cancelar antes del envío: un pedido nuevo no necesita reembolso, uno pagado sí.

Pruébalo

Divide la devolución

Elige el patrón y después los trozos de la división en el orden en que se construyen.

Historia

Como cliente quiero devolver un producto que no me gusta y recuperar mi dinero.

Paso 1: ¿Con qué patrón se divide?

La idea

Por qué no por capas

Dividir por capas parece sensato, porque así está organizado el equipo: una persona construye pantallas, otra el procesamiento. Pero sale muy caro:

  • Nadie puede probarlo. El dueño ve algo solo cuando todas las capas están listas. Si la historia está mal, lo descubre el último.
  • No se puede comprobar. Los criterios de la historia («dentro de los 14 días desde la recepción de la mercancía») tratan del comportamiento, no de una pantalla ni de una base de datos. QA espera hasta el final.
  • El riesgo está al final. Las capas se encuentran al final, y es ahí donde salen los desajustes.
  • No es valiosa según INVEST. Ningún trozo aporta nada a nadie fuera del equipo.

Las capas son tareas dentro de la historia. Las construyen los programadores, pero la historia se da por terminada cuando funciona todo el trozo vertical.

La idea

Cómo saber que una división es buena

  • Cada trozo es una historia. Tiene un rol, un objetivo y un beneficio, y pasa INVEST.
  • El primer trozo aporta más. El mayor valor o el mayor aprendizaje. Si el primer trozo es «preparación», estás cortando mal.
  • Los trozos no se solapan. Ninguno está dentro de otro.
  • Juntos cubren la historia grande. O al menos lo que de ella hace falta de verdad.

El último punto importa. A menudo, después de unos pocos trozos el dueño dice «con eso basta». Los trozos que quedan no se construyen nunca, y eso no es un fracaso. Es la división haciendo su trabajo.

Ejercicio

Divide las historias

1. El importe final. La historia sobre el importe antes de pagar.

Elige el patrón y después los trozos de la división en el orden en que se construyen.

Historia

Como cliente quiero ver el importe final con el envío y los descuentos antes de pagar, para saber cuánto voy a pagar.

Paso 1: ¿Con qué patrón se divide?

2. Los códigos promocionales. La historia de marketing.

Elige el patrón y después los trozos de la división en el orden en que se construyen.

Historia

Como empleado de marketing quiero gestionar los códigos promocionales para poder iniciar y detener campañas sin un programador.

Paso 1: ¿Con qué patrón se divide?

Test

Ponte a prueba

1. ¿Qué es un corte vertical de una historia?
2. ¿Por qué «frontend» y «backend» no son una buena división?
3. «Gestiono los códigos promocionales» se corta mejor…
4. ¿Qué trozo de la devolución debería ir primero?
5. Después de la división, un trozo queda sin construir durante meses. ¿Qué significa?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·