miércoles, febrero 19, 2025

Guía para identificar mejores criterios de aceptación en historias de usuario



Hola a todos,

Escribir criterios de aceptación, a pesar de ser un proceso de llegar a un acuerdo sobre lo que se quiere recibir, no deja de ser un reto. En este proceso surgen al menos tres preguntas:

  • ¿Hasta cuándo es suficiente detalle?
  • ¿Estoy dejando la descripción muy general?
  • ¿Qué más debo incluir?

Ante esto, generalmente, a los Product Owners les digo:

  • No te preocupes, que si falta detalle, los developers te lo recordarán.
  • Si olvidaste algo, es porque aún no es importante.

Aún así, el pedido que constantemente recibo es:

"¿Podrías escribir una guía para hacer criterios de aceptación?"

Considerando que lo anterior lo he respondido de forma particular, voy a cambiar mi aproximación y hacerlo por medio de este artículo que, con seguridad, iré engrosando en la medida que la retroalimentación y la experiencia vayan llegando.


¿Qué son los criterios de aceptación?

Los criterios de aceptación son las condiciones que una historia de usuario debe cumplir para considerarse completada cuando es desarrollada y desplegada por el equipo. Funcionan como una guía para los desarrolladores y testers, asegurando que lo que se construye es realmente lo que el negocio necesita.

Es de considerar que el formato original de las historias de usuario no incluía los criterios de aceptación (1), y aunque no hay un acuerdo sobre quien los incluyó, Ron Jeffries hace referencia tácita a ellos en su artículo sobre las tres C (Card - Conversation- Confirmation) (2):

"Al comienzo de la iteración, el cliente comunica a los programadores lo que desea y les dice cómo confirmará que han hecho lo que se necesita. Define las pruebas de aceptación que se utilizarán para demostrar que la historia se ha implementado correctamente".(2)

No se habla de un formato específico, incluso se sugiere el uso de ejemplos para que estos sean más claros, algo que al final incluyó Behavior Driven Development (BDD) (3).

No confundir con la Definition of Done (DoD). Mientras que los criterios de aceptación son específicos para una historia de usuario, la Definición de Terminado es un estándar general del equipo para determinar cuándo una historia está terminada desde un punto de vista técnico y de calidad.


¿Por qué son clave en un desarrollo ágil? (4)

Los criterios de aceptación cumplen un papel fundamental en la comunicación entre los equipos de desarrollo y los stakeholders. Algunas razones por las que son esenciales incluyen:

  • Evitan malentendidos: Reducen la ambigüedad y ayudan a alinear expectativas.
  • Mejoran la calidad del producto: Definen el mínimo aceptable para el negocio.
  • Facilitan la prueba y validación: Los testers pueden usarlos para diseñar pruebas.
  • Permiten la automatización: Son la base para la creación de pruebas automatizadas.
  • Pueden contener ejemplos que van a guiar a los desarrolladores: Basados en los ejemplos proporcionados, los desarrolladores encontrarán como cumplir con lo que se espera de la fucionalidad.

Cómo aceptar la funcionalidad con el usuario durante la escritura de historias de usuario

Para asegurarte de que la funcionalidad que estás definiendo en la historia de usuario es realmente lo que el usuario necesita, puedes involucrarlo en el proceso desde el inicio. Aquí hay una estrategia para lograrlo:
  1. Validar la historia de usuario antes de escribir los criterios de aceptación

    • Explicar la historia de usuario en términos simples y preguntar:
      • “¿Esta historia realmente cubre tu necesidad?”
    • Preguntar si falta algo en la descripción de la historia.
    • Asegurar que la historia esté escrita en el lenguaje del usuario, no en lenguaje técnico. No incluyas llamado a bases de datos, nombres de tablas, etc.
  2. Involucrar al usuario en la definición de criterios de aceptación

    • Preguntar cómo espera que funcione la funcionalidad en su día a día.
    • Plantear escenarios de uso y validar que cubran sus expectativas.
    • Escribir los criterios de aceptación junto con el usuario o validarlos con él antes de finalizar la historia.
  3. Revisar los criterios de aceptación con ejemplos

    • Presentar ejemplos de cómo funcionará la funcionalidad basados en los criterios de aceptación y preguntar:
      • “Si esto se comporta así, ¿te parecería correcto?”
      • “¿Cuáles son los campos que van a viajar en el formulario? ¿Cuáles serán las validaciones asociadas a cada campo?”
      • “¿Cuáles son los campos que tendrá el reporte? ¿Tendrá filtros?”
      • “¿Cuáles son los mensajes de éxito y de fracaso, según el resultado?”
      • “¿La imagen o gráfico será interactivo? ¿Qué comportamientos tendrá?”
    • Si usa formato Given-When-Then (más adelante cubriré este aspecto), leer los escenarios y validar con el usuario.
  4. Usar prototipos o bocetos si es necesario

    • Si la funcionalidad es visual, mostrar wireframes o pantallas para confirmar que la historia refleja lo que el usuario espera.
  5. Obtener aprobación antes de llevarla a desarrollo

    • Preguntar directamente: “Si construimos esto con base en estos criterios de aceptación, ¿estarías satisfecho?”
    • Si hay dudas o cambios, refinarlos antes de que el equipo empiece a desarrollarla.
  6. Preguntas adicionales para descubrir criterios de aceptación

Si quieres mejorar la identificación de criterios de aceptación, aquí tienes más preguntas que puedes hacer al usuario o al equipo:

    • Sobre el objetivo de la historia
      • ¿Cuál es el problema exacto que queremos resolver con esta historia?
      • ¿Cómo sabremos si la funcionalidad realmente cumple su propósito?
      • ¿Hay métricas o indicadores que podrían ayudarnos a medir el éxito?
    • Sobre los escenarios clave
      • ¿En qué situaciones usarías esta funcionalidad?
      • ¿Cuál es el flujo ideal desde tu perspectiva?
      • ¿Existen variantes o excepciones que debamos considerar?
    • Sobre las reglas de negocio
      • ¿Existen restricciones específicas para esta funcionalidad?
      • ¿Qué pasa si el usuario introduce datos incorrectos?
      • ¿Hay algún comportamiento especial que deba seguir la funcionalidad en ciertos casos?
    • Sobre la experiencia de usuario
      • ¿Qué tan rápido esperas que responda el sistema?
      • ¿Cómo te gustaría recibir la confirmación de que la acción se completó?
      • ¿Prefieres una notificación visual, un correo, o algún otro mecanismo?
    • Sobre seguridad y accesos
      • ¿Todos los usuarios deberían poder acceder a esta funcionalidad?
      • ¿Necesitamos permisos o restricciones especiales?
    •  Sobre el manejo de errores y excepciones
      • ¿Qué pasa si el sistema no puede completar la acción?
      • ¿Cómo debería informarse al usuario en caso de error?
    • Sobre la integración con otros sistemas
      • ¿Esta funcionalidad afecta o depende de otros módulos o sistemas?
      • ¿Qué datos necesitamos capturar o enviar a otras áreas del sistema?

Elementos esenciales de un buen criterio de aceptación

Para que los criterios de aceptación sean efectivos, deben cumplir con estas características:

  • Claridad y precisión: No deben dejar espacio a interpretaciones.
  • Independencia de implementación: No describen cómo hacerlo, sino qué resultado se espera.
  • Testabilidad: Deben ser verificables con pruebas manuales o automatizadas.
  • Alineación con las necesidades del usuario: Siempre deben responder a lo que el usuario final necesita.
Nota importante: Quisiera compartirles algo sobre lo que soy reiterativo cuando explico este concepto: aunque tu historia de usuario, con sus criterios de aceptación, quede bien definida, lo más importante es la conversación alrededor de la historia, el entendimiento común con el equipo.

Formatos comunes para escribir criterios de aceptación

Formato tradicional

Es el más simple: una lista de condiciones que deben cumplirse.

Ejemplo:

Historia de usuario:
Yo como usuario quiero poder restablecer mi contraseña para acceder a mi cuenta en caso de olvido.

Criterios de aceptación:

  • El usuario debe recibir un correo con un enlace de restablecimiento.
  • El enlace debe expirar en 30 minutos.
  • La nueva contraseña debe cumplir con requisitos de seguridad.

Formato Given-When-Then (Gherkin)

Este formato, popular en BDD (Behavior Driven Development), ayuda a describir escenarios de manera estructurada:

  • Given: Estado inicial.
  • When: Acción del usuario.
  • Then: Resultado esperado.

Ejemplo:

Given que el usuario olvidó su contraseña,
When ingresa su correo en la opción “Olvidé mi contraseña” y presiona enviar,
Then debe recibir un correo con un enlace de restablecimiento.

Este enfoque facilita la automatización de pruebas con herramientas como Cucumber.


Errores comunes al redactar criterios de aceptación

  • Ambigüedad: Si no es claro, cada persona lo interpretará de manera diferente. Aunque invitan a la conversación en fases tempranas, próximos al desarrollo pueden convertirse en una fuente de incertidumbre, ejemplo: si la transacción no es exitosa se deberá confirmar al usuario. Surgen varias preguntas con lo anterior ¿Cómo? ¿Qué mensaje? ¿A través de que medios? ¿Proporcionaremos al usuario alguna forma de hacer reclamos?
  • Demasiado técnico: No deberían describir cómo implementarlo, sino qué resultado se espera.
  • No validarlos con el equipo: Deben ser revisados en sesiones de refinamiento del backlog.


Mejores prácticas para escribir criterios de aceptación efectivos

  • Involucrar a todas las partes interesadas: No es solo tarea del Product Owner, los desarrolladores y testers también deben participar.
  • Refinarlos en sesiones de backlog refinamiento con el equipo: Asegurar que sean claros antes de iniciar el desarrollo.
  • Hacerlos testables: Si no se pueden probar, probablemente no están bien escritos.
  • Utilizar el lenguaje del usuario final: Evitar tecnicismos innecesarios.


Cómo automatizar pruebas basadas en criterios de aceptación

Los criterios de aceptación bien definidos pueden traducirse directamente en pruebas automatizadas. Algunas herramientas que permiten hacer esto incluyen:

  • Cucumber (BDD, Given-When-Then).
  • Selenium (Pruebas UI basadas en escenarios).
  • JUnit / TestNG (Pruebas unitarias automatizadas).

Esto permite que el equipo valide rápidamente si una historia cumple con los requerimientos sin depender exclusivamente de pruebas manuales.


Checklist final para validar criterios de aceptación

  • Historia de usuario validada con el usuario o stakeholder.
  • Criterios de aceptación basados en necesidades reales. Evita el desperdicio, es decir, poner criterios que no serán usados.
  • Ejemplos o escenarios de uso confirmados.
  • Información que se capturará o que retornará la funcionalidad, y el nombre de sus campos.
  • Reglas de negocio y restricciones documentadas.
  • Casos de error y manejo de excepciones definidos.
  • Aprobación del usuario antes de pasar a desarrollo.

Nota importante: Un buen criterio de aceptación se puede convertir en un caso de prueba, directamente. Si el tester puede escribir una prueba automatizada o manual a partir de él, es una señal de que está bien definido.


Y si quedas con muchos criterios de aceptación

Si al final de todo este ejercicio, tu historia de usuario queda con entre seis y ocho criterios de aceptación (es mi actual heurística, puede que cambie con la IA), está perfecta de tamaño, pero si supera con creces este rango, pues. ¡Divide la historia y listo! Puedes tener más historias de usuario que ayuden con tu propósito de generar valor, la verdad, no hay lío con eso. 

El mejor criterio de división es: que la historia requiera del trabajo suficiente para ser completado en alrededor de 36 horas, por desarrolladores y testers.


Cerrando

Escribir buenos criterios de aceptación es clave en el desarrollo ágil. Mejoran la comunicación, reducen malentendidos y permiten entregar software de mejor calidad.

Si en tu equipo todavía no los documentan formalmente, este es un buen momento para comenzar. 


Notas. Aclaraciones Comentarios

  1. De Colección: Ejemplos de Historias de Usuario de la Fuente: Los Libros de Extreme Programming (XP) - Clic aquí.
  2. XP esencial: Tarjeta, Conversación, Confirmación - Clic aquí.
  3. What's in a Story? - Clic aquí.
  4. En este momento de la historia existe un boom sobre la Inteligencia Artificial y lo que puede proporcionarnos el uso de agentes; es posible que en el futuro cercano muchas o todas las tareas de desarollo y testing sean ejecutadas por Agentes de IA. Amanecerá y veremos.
  5. La historia de las historias de usuario - Clic aquí.

miércoles, noviembre 20, 2024

Somos las personas que estábamos esperando - Mensaje Hopi


Estuvieron diciéndole a la gente que ésta es la Undécima Hora.

Ahora deben regresar y decirle a la gente que la Hora ha llegado.

He aquí las cosas que deben considerarse:

¿Dónde están viviendo?

¿Qué están haciendo?

¿Cuáles son sus relaciones?

¿Están en el vínculo correcto?

¿Dónde está el agua?



Conozcan su huerto:

Es tiempo de que pronuncien su Verdad.

De que construyan su comunidad.

Sean buenos unos con otros.

Y no busquen fuera de sí mismos al líder.



¡Esta podría ser una buena época!



Hay allí un río que fluye muy rápido.

Es tan grande y raudo que asustará a algunos.

Tratarán de aferrarse a la orilla.

Sentirán que son destrozados y sufrirán mucho.



Sepan que el río tiene un destino.

Los mayores dicen que debemos soltar la orilla

Y deslizarnos hacia el centro del río.

Manteniendo abiertos los ojos, y las cabezas por encima del agua.



Vean quién está allí con ustedes y celebren.



A esta altura de la historia, no tomaremos nada como personal

Y mucho menos a nosotros mismos,

Pues en el momento en que lo hacemos

Nuestro crecimiento y viaje espiritual se detienen.



La época del lobo solitario concluyó.

¡Reúnanse!



Cancelen la palabra combate en su actitud y vocabulario.



Todo lo que hagan desde ahora debe hacerse de modo sagrado

Y celebrando.



"Somos la gente que estábamos esperando".

 --------------

Copiado de: https://www.facebook.com/notes/el-balc%C3%B3n/mensaje-de-los-ancianos-hopi-a-la-humanidad-somos-la-gente-que-est%C3%A1bamos-esperan/293796200638244/

Los “Hopis” pertenecen al grupo de antiguos habitantes de la meseta central de los Estados Unidos de Norteamérica, son menos de 10 000 individuos, muchos de los cuales viven en Oraibi en la reserva federal Pueblo Navajo.Este lugar es considerado el asentamiento humano más antiguo de los Estados Unidos. El término hopi quiere decir "los pacíficos". Y son un pueblo profundamente espiritual.

Publicado también en: https://www.linkedin.com/pulse/somos-las-personas-que-est%C3%A1bamos-esperando-mensaje-abad-londo%C3%B1o/

miércoles, noviembre 13, 2024

El papel crucial del Product Owner como facilitador (*)

 

Imagen Generada con Dall-e

Hola a todos,

En el ámbito del desarrollo de productos, el papel del Product Owner es fundamental para orientar la dirección de un proyecto hacia el éxito. Sin embargo, ser un Product Owner va más allá de simplemente liderar el producto; también implica ser un facilitador tanto para el equipo que construye el producto como para el equipo involucrado en el proceso de descubrimiento. En este artículo, profundizaremos en la importancia de ser un facilitador como Product Owner y exploraremos por qué una facilitación eficaz es clave para lograr resultados exitosos en el desarrollo de productos.


Puntos clave

Un Product Owner es responsable de definir las características y funcionalidades de un producto, priorizar tareas y garantizar que el producto final satisfaga las necesidades de los clientes. Además de estas responsabilidades básicas, un Product Owner también debe destacarse en facilitar la comunicación y la colaboración dentro de los equipos de desarrollo y descubrimiento. Al fomentar un entorno de diálogo abierto, transparencia y trabajo en equipo, un Product Owner puede agilizar el proceso de desarrollo, mitigar riesgos e impulsar la innovación.

Los Product Owners exitosos que se destacan en la facilitación suelen poseer fuertes habilidades de comunicación, empatía y un profundo conocimiento de las metodologías Agile. Se involucran activamente con los miembros del equipo, escuchan sus aportes y los empoderan para que aporten sus ideas y perspectivas. Al crear una cultura de confianza y respeto, estos Product Owners inspiran creatividad, mejoran la moral del equipo y, en última instancia, entregan productos de alta calidad que resuenan con los clientes.

Para convertirse en un mejor facilitador en un rol de Product Owner, las personas pueden emplear varias estrategias, como organizar reuniones de equipo periódicas, promover la colaboración interfuncional y brindar retroalimentación continua. Además, aprovechar las herramientas y técnicas de las metodologías Agile puede ayudar a los Product Owners a administrar prioridades de manera efectiva, adaptarse a los requisitos cambiantes e impulsar la mejora continua en los procesos de desarrollo de productos.

Llamado a la acción

A medida que recorra su camino como Product Owner, recuerde el papel crucial de la facilitación para fomentar la colaboración, la comunicación y la innovación dentro de sus equipos. Implemente técnicas de facilitación, adopte metodologías ágiles y esfuércese por crear una cultura de confianza y respeto que permita a los miembros de su equipo sobresalir. Comparta sus experiencias, desafíos y éxitos con nosotros y sigamos explorando juntos el panorama en evolución de la gestión de productos y la colaboración en equipo.

Al encarnar el papel dual de líder y facilitador, los Product Owners pueden realmente elevar a sus equipos, impulsar cambios impactantes y ofrecer productos excepcionales que resuenen en los clientes. Aprovechemos el poder de la facilitación y liberemos todo el potencial de nuestros equipos en el dinámico mundo del desarrollo de productos.

------- o -------

* Nota Importante:

Todo lo anterior hace parte de un proceso de aprendizaje sobre GenAI. Fue creado usando CrewAI, con tres agentes de GenAI interactuando entre sí: Planner, Writer y Editor. Lo generado, lo revisé y el resultado me pareció relevante, por eso lo publiqué. El prompt fue el siguiente:

------------------

crew = Crew( 
agents=[planner, writer, editor],
tasks=[plan, write, edit],
verbose=2
)
topic = "Un Product Owner, además de liderar el producto también debe
ser un facilitador tanto para el equipo que construye el
producto, como para el equipo con el cual esta haciendo el discovery"
result = crew.kickoff(inputs={"topic": topic})
Nota: A los agentes previamente se les configura: objetivo y contexto: y a las tareas: descripción y salidas esperadas.


Solo quiero añadir lo siguiente al artículo:

Un gran maestro en el tema de facilitación es por naturaleza de su rol el Scrum Master, este puede enseñar estas técnicas y ayudar al Product Owner en su jornada para generar consensos en los diferentes grupos con los que interactua. 

Una buena caja de herramientas la proporciona las estructuras liberadoras, las cual en sus categorías de:

  • Analizar
  • Estrategizar
  • Planear
  • Revelar
Ofrecen varias alternativa para ayudar a los equipos y grupos a priorizar y decidir su trabajo.


Saludos ágiles,

Jorge Abad.