Estoy en un equipo de proyecto de 4 desarrolladores, incluido yo mismo. Hemos tenido una larga discusión sobre cómo manejar el trabajo extra que surge en el curso de un solo elemento de trabajo.
Este trabajo adicional suele ser algo que está ligeramente relacionado con la tarea, pero no siempre es necesario para lograr el objetivo del elemento (puede ser una opinión). Los ejemplos incluyen, pero no se limitan a:
- refactorización del código modificado por el elemento de trabajo
- código de refactorización adyacente al código cambiado por el artículo
- rediseñando el área de código más grande alrededor del ticket. Por ejemplo, si un elemento hace que cambie una sola función, se da cuenta de que toda la clase ahora podría rehacerse para acomodar mejor este cambio.
- mejorar la interfaz de usuario en un formulario que acaba de modificar
Cuando este trabajo extra es pequeño, no nos importa. El problema es cuando este trabajo adicional causa una extensión sustancial del elemento más allá de la estimación original del punto característico. A veces, un elemento de 5 puntos llevará 13 puntos de tiempo. En un caso, teníamos un elemento de 13 puntos que, en retrospectiva, podría haber sido 80 puntos o más.
Hay dos opciones en nuestra discusión sobre cómo manejar esto.
Podemos aceptar el trabajo extra en el mismo elemento de trabajo y descartarlo como una estimación errónea. Los argumentos para esto han incluido:
- Planeamos "rellenar" al final del sprint para dar cuenta de este tipo de cosas.
- Siempre deje el código en mejor forma de lo que lo encontró. No verifique el trabajo a medias.
- Si dejamos la refactorización para más adelante, es difícil programarla y es posible que nunca se realice.
- Estás en el mejor "contexto" mental para manejar este trabajo ahora, ya que estás en la cintura en el código. Es mejor sacarlo del camino ahora y ser más eficiente que perder ese contexto cuando vuelvas más tarde.
Trazamos una línea para el elemento de trabajo actual y decimos que el trabajo adicional va a un ticket separado. Los argumentos incluyen:
- Tener un boleto separado permite una nueva estimación, por lo que no nos estamos mintiendo sobre cuántos puntos son realmente las cosas, o tener que admitir que todas nuestras estimaciones son terribles.
- El "relleno" del sprint está destinado a desafíos técnicos inesperados que son barreras directas para completar los requisitos del boleto. No está destinado a elementos secundarios que son simplemente "agradables".
- Si desea programar la refactorización, simplemente colóquelo en la parte superior de la cartera de pedidos.
- No hay forma de que podamos explicar adecuadamente estas cosas en una estimación, ya que parece algo arbitrario cuando surge. Un revisor de código podría decir "esos controles de la interfaz de usuario (que en realidad no modificó en este elemento de trabajo) son un poco confusos, ¿puede arreglar eso también?" que es como una hora, pero podrían decir "Bueno, si este control ahora hereda de la misma clase base que los otros, ¿por qué no mueve todo este código (cientos de líneas de) a la base y vuelve a conectar todo esto? , los cambios en cascada, etc.? " Y eso lleva una semana.
- "Contamina la escena del crimen" al agregar trabajo no relacionado al boleto, lo que hace que nuestras estimaciones originales no tengan sentido.
- En algunos casos, el trabajo adicional pospone un registro, lo que provoca el bloqueo entre los desarrolladores.
Algunos de nosotros ahora estamos diciendo que deberíamos decidir un corte, como si las cosas adicionales son menos de 2 FP, va en el mismo boleto, si es más, conviértalo en un boleto nuevo.
Dado que solo estamos unos meses en usar Agile, ¿cuál es la opinión de todos los veteranos Agile más experimentados sobre cómo manejar esto?