Saltar a contenido

User Stories: cómo escribirlas correctamente

Ilustración de User Stories

Las user stories son descripciones breves de una funcionalidad desde la perspectiva del usuario. Son la unidad fundamental de trabajo en la mayoría de equipos ágiles y permiten mantener el foco en el valor que se entrega al usuario final.

¿Qué es una user story y por qué funciona?

Una user story no es un documento de requisitos tradicional. No especifica cada detalle técnico ni cada caso de borde. Es una conversación empaquetada en tres líneas que invita a la colaboración entre el Product Owner, los desarrolladores y los stakeholders.

El concepto fue popularizado por Ron Jeffries y Kent Beck a finales de los 90 como parte de Extreme Programming (XP). Desde entonces se ha convertido en el estándar de facto para capturar requisitos en equipos ágiles. Según la encuesta State of Agile 2023, el 79 % de las organizaciones que usan Agile utilizan user stories como su principal técnica de gestión de requisitos.

La magia de las user stories está en que posponen el detalle hasta el último momento responsable. En lugar de especificar todo al inicio del proyecto (como haría Waterfall), las stories definen el qué a alto nivel y dejan el cómo detallado para cuando el equipo está a punto de implementarlas.

El formato estándar: Como... quiero... para...

La estructura clásica de una user story es:

Como [rol de usuario], quiero [acción o funcionalidad] para [beneficio o valor].

Cada parte tiene una función específica:

  • Como define quién se beneficia. Esto obliga al equipo a pensar en el usuario real, no en un concepto abstracto. ¿Es un cliente registrado, un administrador, un usuario anónimo?
  • Quiero describe la funcionalidad deseada. Debe ser una acción concreta, no un objetivo difuso.
  • Para explica el beneficio o el motivo. Esta es la parte más importante y la que más se omite. Sin ella, el equipo implementa funcionalidades sin entender el propósito.

Ejemplos de user stories bien escritas

  • "Como cliente registrado, quiero guardar productos en una lista de deseos para comprarlos más tarde sin tener que buscarlos de nuevo."
  • "Como administrador del sistema, quiero bloquear usuarios que incumplan las normas para mantener la comunidad segura y libre de spam."
  • "Como usuario anónimo, quiero ver los precios sin registrarme para decidir si el producto me interesa antes de crear una cuenta."

Ejemplo de user story mal escrita

"Como usuario, quiero que el sistema sea rápido para que funcione bien."

Esta story falla en tres aspectos: el rol es genérico, la funcionalidad no es una acción concreta, y el beneficio es vago. Una mejor versión sería: "Como cliente que busca productos, quiero que los resultados de búsqueda aparezcan en menos de 2 segundos para no perder la paciencia mientras navego."

Las 3C: Card, Conversation, Confirmation

Las user stories se sostienen sobre tres pilares que Ron Jeffries denominó las 3C:

Card (Tarjeta)

La descripción breve escrita en la story. Es el punto de partida, no el destino. Ocupa una ficha física o un registro en Jira (o la herramienta que uses). La card es lo único que se escribe, pero no es lo único que importa.

Conversation (Conversación)

Los detalles no se escriben en la card; se exploran en conversaciones con el Product Owner, los stakeholders y el equipo. El refinamiento del backlog, las sesiones de aclaración y las preguntas durante la planificación son parte de esta conversación. Cuanto más conversación ocurra antes de implementar, menos sorpresas habrá después.

Confirmation (Confirmación)

Son los criterios de aceptación que verifican que la story está completa. Definen el comportamiento esperado de forma concreta y comprobable. Los criterios de aceptación suelen escribirse en formato "Dado... cuando... entonces..." (Given/When/Then), una técnica que popularizó el Behavior-Driven Development (BDD).

Ejemplo de criterios de aceptación para "guardar producto en lista de deseos":

  • Dado que un cliente registrado está viendo un producto, cuando hace clic en "Añadir a lista de deseos", entonces el icono cambia a estado "guardado" y aparece un mensaje de confirmación.
  • Dado que un cliente tiene productos en su lista de deseos, cuando accede a su perfil y selecciona "Lista de deseos", entonces ve todos los productos guardados con su precio actual.
  • Dado que un producto en la lista de deseos baja de precio, cuando el sistema ejecuta la tarea nocturna de revisión, entonces envía un email al cliente notificándole de la bajada.

Criterios INVEST para evaluar tus user stories

Bill Wake propuso el acrónimo INVEST para evaluar la calidad de una user story. Cada letra representa una característica que toda buena historia debería tener:

Letra Significado Pregunta clave Ejemplo de fallo
I Independent (Independiente) ¿Se puede priorizar sin depender de otras? "El login depende del registro"
N Negotiable (Negociable) ¿Hay flexibilidad en cómo implementarla? "Usar exactamente Stripe con tarjeta"
V Valuable (Valiosa) ¿Aporta valor real al usuario? "Migrar la base de datos a PostgreSQL"
E Estimable (Estimable) ¿El equipo puede dimensionarla? "Mejorar la experiencia de usuario"
S Small (Pequeña) ¿Cabe en un Sprint? "Sistema de recomendación completo"
T Testable (Comprobable) ¿Tiene criterios claros de verificación? "La app debe ser intuitiva"

Una story que no cumple INVEST no está lista para entrar en un Sprint. Si el equipo intenta estimar algo que no es estimable, las estimaciones serán ruido. Si la story no es testeable, la Definition of Done no se podrá verificar.

Cómo dividir historias que no son "Small"

Uno de los mayores desafíos es dividir historias grandes (épicas) en stories más pequeñas. Estas son las estrategias que mejor funcionan:

  1. Por operaciones CRUD: en lugar de "Gestión de usuarios", crea "Crear usuario", "Listar usuarios", "Editar usuario" y "Eliminar usuario".
  2. Por flujo: separa el flujo feliz del manejo de errores. Primero implementa el caso principal y luego los bordes.
  3. Por plataforma: si la funcionalidad afecta web y móvil, crea una story por plataforma.
  4. Por roles: distintas funcionalidades para distintos roles (admin vs usuario normal).

Errores comunes al escribir user stories

Después de revisar cientos de historias de equipos de todos los niveles, estos son los errores que más se repiten:

1. Escribir épicas disfrazadas de historias

"Como administrador, quiero gestionar todo el sistema de usuarios." Esto no es una historia, es una épica. No cabe en un Sprint. Divídela en historias más pequeñas.

2. Incluir la solución técnica en lugar de la necesidad

"Como usuario, quiero que el frontend llame al endpoint /api/v2/users con autenticación JWT." Esta historia describe la implementación, no la necesidad. El equipo debe decidir la solución técnica basándose en el problema del usuario, no al revés.

3. Olvidar los criterios de aceptación

Una historia sin criterios de aceptación es una promesa vacía. El equipo no sabe cuándo estará completa y el PO puede rechazarla por cualquier motivo. Los criterios de aceptación son el contrato mínimo de la historia.

4. Escribir desde la perspectiva del desarrollador

"Como sistema backend, quiero exponer una API REST." Esto no tiene sentido. Las historias siempre deben estar escritas desde la perspectiva de un ser humano que interactúa con el sistema.

5. Historias demasiado vagas

"Mejorar la velocidad de la aplicación." Sin métricas ni criterios, esto no es una historia, es un deseo. Una versión mejor sería: "Como usuario, quiero que la página de inicio cargue en menos de 3 segundos para no abandonar el sitio por impaciencia."

6. Añadir demasiado detalle técnico

Algunos equipos escriben historias que parecen especificaciones técnicas. "Como usuario, quiero que el botón sea azul #2196F3, mida 48px de alto, tenga border-radius de 8px y esté alineado a la derecha." Eso es un diseño visual, no una user story. El cómo se implementa debe negociarse con el equipo.

Paso a paso: cómo escribir una buena user story

Este es el proceso que recomiendo a los equipos que empiezan:

  1. Identifica al usuario real. No escribas "usuario" a secas. Define el arquetipo: "cliente registrado", "administrador de contenido", "visitante anónimo". Cada rol tiene necesidades distintas.

  2. Describe la funcionalidad desde su perspectiva. Usa verbos de acción: "ver", "crear", "editar", "buscar", "filtrar", "descargar". Evita verbos técnicos como "ejecutar", "procesar", "renderizar".

  3. Explica el beneficio. Pregúntate: ¿por qué el usuario quiere esto? Si no encuentras un beneficio claro, cuestiona si la funcionalidad es necesaria.

  4. Define 2-5 criterios de aceptación. Usa el formato Dado/Cuando/Entonces. Cubre el caso feliz, al menos un caso de error y un caso de borde.

  5. Revisa INVEST. Antes de dar la historia por buena, pásala por el filtro INVEST. Si falla en más de un criterio, refactorízala.

  6. Estima con el equipo. La estimación no es un compromiso de entrega, es una conversación para entender la complejidad. Si el equipo no puede estimar la historia, probablemente necesita más refinamiento.

Datos del sector sobre user stories

Según el informe "Agile Requirements" de VersionOne (hoy Digital.ai), los equipos que escriben criterios de aceptación en formato Given/When/Then reducen los defectos en un 27 % en comparación con los que no lo hacen. La claridad en la confirmación tiene un impacto directo en la calidad del código.

Por otro lado, un estudio de la Universidad de Magdeburgo encontró que las historias que incluyen el "para" con el beneficio explícito tienen un 34 % más de probabilidades de ser implementadas correctamente a la primera. Esto confirma que entender el propósito detrás de una funcionalidad mejora la precisión de la implementación.

Mi recomendación personal

He trabajado con equipos que pasaban horas escribiendo historias perfectas en Jira y equipos que las escribían en servilletas. Los segundos solían ser más efectivos. La user story no es un documento, es el inicio de una conversación.

Mi consejo: escribe la historia justo con el detalle suficiente para que el equipo pueda empezar a conversar. No intentes capturar todos los casos de borde antes de la planificación. El detalle emerge durante la conversación del refinamiento y la implementación. Si dedicas más de 15 minutos a escribir una historia, probablemente estás invirtiendo demasiado tiempo.

Una buena historia hace que el equipo pregunte "¿y si...?" y que el Product Owner tenga respuestas. Una mala historia hace que el equipo asuma y que el producto se desvíe.

Conclusión

Las user stories mantienen el foco en el valor para el usuario. Una buena story es el inicio de una conversación, no un documento de requisitos cerrado. El detalle emerge a través de la colaboración continua entre el equipo y el Product Owner. Domina el formato, respeta INVEST, escribe criterios de aceptación claros y sobre todo, conversa. La user story perfecta no existe; la user story útil es la que genera la conversación correcta en el momento adecuado.