¿Cómo manejar las historias de usuario que no se pueden dividir y que no se ajustan ni siquiera a un sprint de 30 días?

  1. Dado un equipo pequeño (aproximadamente 3 personas) y un área técnicamente desafiante (por ejemplo, middleware, software integrado, etc.), y
  2. Suponiendo que una historia de usuario es lo más pequeño que tiene valor para el usuario final ,

¿Cómo haces para manejar las historias que tardan más de un mes en llegar al estado TERMINADO? Por supuesto, uno siempre podría dividirlos en varias de las llamadas "historias técnicas", pero son, con la excepción de los picos de refactorización, un gran no-no en Agile, ¿no es así?

Creo que esta respuesta es una buena respuesta a su pregunta, incluso si no es exactamente el mismo escenario: pm.stackexchange.com/a/23372/29374

Respuestas (7)

Primero, haz cosas que tengan sentido. Si tiene sentido dividir la gran historia en algunas más pequeñas, incluso si no puede entregar esas partes a su cliente por separado, ¿por qué no debería hacerlo? No te pagan por adaptarte perfectamente a lo que dicen algunos líderes intelectuales.

En segundo lugar, si la situación es más bien una excepción, el trato es como tal. Si no desea dividir la historia en partes más pequeñas, puede empujar una historia entre un par de iteraciones y aceptar que esta vez se verá así.

Tercero, si la situación es bastante común , piense cómo puede ajustar el proceso que sigue de una manera que realmente permita tales historias . Una cosa que me viene a la mente es Kanban, donde renuncias por completo a las iteraciones y puedes lidiar con una historia XXL y al mismo tiempo construir muchas más pequeñas ya que no limitas el trabajo basándote en el tiempo, pero limitas un número. de tareas concurrentes. En este caso, una gran historia ocuparía solo un espacio, pero lo usaría durante más tiempo.

Cuatro, no seas ortodoxo en la entrega de valor a un cliente . Si quisiera, y necesitara, hacer algo de mantenimiento en la arquitectura que no le diera valor a sus clientes, pero lo ayudara a limitar los costos de mantenimiento, ¿rechazaría tal tarea? Probablemente no. Y, sin embargo, de alguna manera lo pondrías en tu cartera de pedidos.

Después de todo, ágil se trata de flexibilidad, de reaccionar a los cambios y no de mantener las reglas a toda costa, ¿verdad?

Me encanta el comentario "No te pagan por adaptarte perfectamente a lo que dicen algunos líderes intelectuales".
Una cosa que siempre me hace pensar: ¿la refactorización no aporta realmente valor al cliente a largo plazo también? Especialmente si redujo el mantenimiento, entonces debe haber cambiado "algo": permitirle entregar más artículos en el futuro (un cliente +) o reducir la cantidad y/o la criticidad de los defectos (también un cliente +), así que tal vez no sea tan tan malo como a veces pensamos? :)
Bueno, probablemente sí. Al menos mientras se haga bien. Sin embargo, es difícil trazar una línea directa entre la refactorización de un fragmento de código y la ganancia del cliente. Además, dudo que muchos clientes paguen por la "función de refactorización" :)
"Si quisiera, y necesitara, hacer algo de mantenimiento en la arquitectura que no le diera valor a sus clientes, pero lo ayudara a limitar los costos de mantenimiento, ¿rechazaría tal tarea? Probablemente no" ==> Me encanta eso, pero ¿cómo lo representa? esto como una historia de usuario? He leído en muchos lugares que los requisitos no funcionales/las historias técnicas son un gran nono en Agile. Estoy luchando con esto y no quiero caer en el tipo de trampa "como desarrollador necesito..."

Aferrarse a las historias de los usuarios como la unidad de planificación más pequeña es uno de los errores abominables de los agilistas.

¿Cuál es la historia de usuario de un puente? ¿Dónde se tiene en cuenta la construcción de pilas, vanos, vigas, etc. que componen la subestructura? La construcción de la plataforma (carretera) es de tan poca importancia (relativamente hablando), en esta narración ni siquiera se detalla.

¿Cuántas historias de usuario para una casa involucran los cimientos y el techo? Sin embargo, son las partes más caras de un edificio.

Las historias de usuario son una herramienta fundamental para la definición del alcance y el establecimiento de objetivos para el proyecto, pero no son la única herramienta a utilizar. Ayudan a definir el propósito de un proyecto y cuándo está completo. No proporcionan el alcance completo del esfuerzo involucrado. Ayudan a comenzar el proceso de planificación. No son el plan final.

Realmente odio la analogía del puente. Realmente no se puede liberar un subconjunto de un puente de la misma manera que lo hacemos en el software.
No creo que haya nada malo con las historias como la unidad de planificación más pequeña. Solo tenemos historias más grandes en la distancia e historias cada vez más pequeñas a medida que nos acercamos a la fecha actual.
No, no puede publicar un subconjunto de una historia de usuario. Ese es mi punto. Cuando la infraestructura para habilitar alguna funcionalidad no está presente, es necesario desarrollarla. Una historia de usuario encapsula el valor proporcionado al usuario/PO. Si la historia de usuario cabe en una tarjeta, pero el desarrollo necesario para implementarla requiere más de una (como el sprint de 30 días planteado por el OP), entonces las historias de usuario son inadecuadas para la planificación/programación.
Pero puede dividir las historias de los usuarios más allá del valor más pequeño para el cliente. De hecho, los últimos 6 meses he estado trabajando en un proyecto en el que el objetivo principal es que los clientes no noten ninguna diferencia (migración de plataforma). Podría formular tenuemente una historia de usuario con el valor de realizar cambios futuros más rápidamente, pero eso no se logrará hasta que se complete todo el proyecto (de hecho, durante la migración, en realidad hacemos que nuestra plataforma sea más difícil de trabajar).
Entonces, nuestras historias no se enfocan en el valor para el cliente, o incluso para el negocio, son pasos comprobables que nos acercan a nuestra meta. De esto es de lo que habla Pawel (no seas ortodoxo al entregar valor a un cliente) en su respuesta.
Cualquier cosa menor que el valor para el cliente no es una historia de usuario , que es el punto. Llámalo una historia de desarrollador. Pero el OP, al igual que muchos agilistas, trató de encajar todo en la historia del usuario porque eso es lo que les gusta usar a los agilistas para mantener el desarrollo ágil . Desglosarlo corre el riesgo de crear un BDUF. Pero muy a menudo, desglosarlo es una necesidad. Por lo tanto, no limite la planificación/programación del desarrollo ni las palabras de moda ágiles a las historias de los usuarios .
Disculpas si me estoy tomando esto de la manera incorrecta, pero parece que estás siendo bastante pedante con la noclematura. Son cosas en las que trabajamos; Realmente no me importa si lo llamamos historias de usuario, elementos de trabajo o pasteles de pescado para ser honesto. Idealmente, me gusta que mis historias tengan valor directo para el cliente; romper esa pauta no impide que sea una historia.
Si cree que soy pedante con la nomenclatura, ¿qué podría pensar sobre los agilistas que insisten en que las historias de los usuarios deben encajar en los sprints? ¿Y por qué sigues debatiendo sobre la nomenclatura si no importa? Si bien es bueno que sea más pragmático sobre el proceso y no tan estridente sobre la terminología, no todos están en la misma página. Muchos promotores ágiles están obsesionados con los dogmas del "valor del cliente" sin considerar los fundamentos arquitectónicos, lo que deja a los conversos confundidos. De ahí la pregunta del OP.

Si realmente no puede dividir la historia en partes valiosas, iría con el "componente comprobable más pequeño" para dividirla.

¿Puedes dar un ejemplo de una historia?

Debo ser bastante genérico por razones de NDA, por lo que un ejemplo sería "Para calibrar un sensor de un dispositivo médico ajustando una serie de parámetros. Los parámetros son interdependientes, por lo que implementar un soporte para un solo parámetro no proporciona ningún valor al final usuario." Restricciones de implementación: C++ como lenguaje, entorno integrado y necesidad de lidiar con un marco ya desarrollado que prácticamente no se puede cambiar debido a los costos de nuevas pruebas incurridos por el cumplimiento normativo aplicable. Lo que, a su vez, genera un esfuerzo adicional para encontrar soluciones alternativas.
Sin embargo, me gusta la idea del "componente comprobable más pequeño".
Yo uso "algo que sea lo suficientemente pequeño como para recibir comentarios rápidamente", ya que esa es principalmente la razón por la que hacemos Agile en primer lugar. Si un equipo es lo suficientemente productivo como para producir una función completa en un sprint, o entre la disponibilidad de las partes interesadas relevantes para proporcionar comentarios, con la cadencia que sea, entonces no recomiendo dividir la historia.

Gran respuesta de Pawel. Algunas otras cosas a considerar:

Hecho debe ser desde la perspectiva de a quién se le entrega la historia. Este no es siempre el usuario final.

Hay una diferencia entre envío potencial y envío. Intentamos que el trabajo que hacemos sea completo, aunque puede que no sea un conjunto completo de funciones.

Todas las historias se pueden dividir. Es difícil hacer esto teóricamente durante la planificación.

Trate de no dividir las historias en la dimensión del proceso. Por ejemplo, no construya en una iteración y pruebe en la siguiente. Esto tendrá un impacto en el rendimiento y puede conducir a una deuda técnica.

Gracias, esto en realidad secunda el enfoque del "componente comprobable más pequeño" sugerido por Ben.
"Hecho debe ser desde la perspectiva de a quién se le entrega la historia. Este no siempre es el usuario final". ==> ¿No dice Agile/scrum.org lo contrario? Las historias de usuarios se tratan de entregar valor al usuario final, ¿no es así? De lo contrario, caerá en una historia técnica del tipo "Como desarrollador, necesito..." y perderá el verdadero valor del trabajo.

Ken tenía algunos buenos consejos. Hemos encontrado que las cosas más importantes a tener en cuenta son que...

  1. El código siempre debe ser potencialmente enviable. Si se encontrara un gran error hoy que derribara toda la aplicación, ¿podría detenerse, corregir el error y pasar a producción? Puede significar que hay algunos conjuntos de características parcialmente completados, pero todo lo que hay allí es de alta calidad, probado y completo.
  2. Debes haber hecho un progreso demostrable al final del sprint. Esto es importante cuando se piensa en cómo desglosar el artículo. Entonces, tal vez esta pieza por sí sola no proporcione "valor" al cliente, pero podemos demostrarle esta pieza al cliente y usarla para mostrar el progreso hacia el objetivo final. Como sugiere Ken, definitivamente evite la división en las líneas de proceso (desarrolle y luego pruebe) a toda costa. Por lo tanto, ayuda pensar que una historia debe proporcionar valor o demostrar progreso para proporcionar valor.

De la misma manera que aborda cualquier épica: divídala en partes más pequeñas.

Hay muchas maneras diferentes de hacer esto. Por ejemplo, si su proyecto tiene muchos otros sistemas (heredados) con los que interactuar, intente encontrar una historia de usuario de nivel inferior que se ocupe de UN sistema heredado. Y vea cómo la implementación de eso impacta en la historia épica general.

Otro enfoque es abordar las cosas desde el punto de vista de las partes interesadas.

Echa un vistazo a esta publicación para ver otra forma de lidiar con eso .

Es bueno intentar dividirse en historias técnicas o funcionar como una mini cascada, siempre que tenga sentido para el equipo y las partes interesadas relevantes.