¿Debería programarse la deuda técnica como una característica o una tarea (o un error)?

19

He agregado un par de historias de usuarios que abordan algunas deudas técnicas a mi tablero de Pivotal Tracker. ¿Debería considerarlos como características (mantener mi nivel de velocidad) o como tareas / errores (reducir mi velocidad)? Entiendo que a la larga no hará ninguna diferencia si hago uno u otro de manera consistente, pero cada vez que agrego una historia de deuda técnica tengo que tomar la decisión.

Algunos pensamientos:

  • En realidad no son errores, no rompen nada
  • Los usuarios no han solicitado nada, ya que es una implementación de bajo nivel que no los afecta, pero facilitará el desarrollo a largo plazo
  • Si define características como historias que agregan valor a los usuarios, bueno a) no lo hacen, ya que los usuarios no verán ningún beneficio directo, pero luego b) lo hacen porque hacen posible el desarrollo / mantenimiento futuro, lo que agrega valor, solo que no ahora

No estoy decidiendo si hacer o no el trabajo o cuándo programarlo, solo sé qué debo llamar deuda técnica en mi herramienta de gestión de proyectos y por qué.

Rebecca Scott
fuente

Respuestas:

17

Es una característica.

As a [Developer], 
I want to [refactor the whizbang library] 
in order to [simplify maintenance and speed execution]

Se define, programa y rastrea como cualquier otra característica.

Si la implementación de esta función no es lo suficientemente valiosa (para el cliente o para usted) como para que se pueda programar, ese es un problema diferente.

Steven A. Lowe
fuente
1
Ajá. Fantástica respuesta. No había pensado en las historias escritas desde mi perspectiva, pero tiene sentido para mí especialmente ser un desarrollador interno, ya que también tengo que actuar como cliente. ¡Gracias!
Rebecca Scott,
55
Tengo que estar en desacuerdo. Desde esta perspectiva, prácticamente todo - incluso la creación de mi IDE o conseguir una cuenta SMC - se vería como una "característica" ...
Péter Török
2
@Peter: no necesariamente. Configurar su IDE es un esfuerzo inevitable; otras cosas simplemente caen en la categoría de "cosas que se hacen". Pero reemplazar un marco o algo es muy diferente. El negocio debe ser consciente de lo que va a hacer, el beneficio para ellos y se les debe permitir priorizarlo en contra de otro trabajo. Por lo tanto, es una característica en todos los sentidos.
pdr
44
¿Seguramente una característica debería agregar valor al producto? La refactorización no agrega ese valor, simplemente permite a los desarrolladores trabajar en ella de manera más eficiente y reducir las posibilidades de errores. El valor agregado de este tipo de cosas sería un efecto secundario. Llamar a esto una característica sería simplemente una forma de presentarla para que el propietario del producto tenga más probabilidades de priorizarla.
David Neale
3
-1 El incumplimiento de su trabajo nunca debe tratarse como una característica.
Martin Wickman
18

(Pagar) la deuda técnica no es una característica , porque el cliente no está calificado para tomar decisiones al respecto . Lo más importante es que el cliente no puede decidir cuándo está terminado, y además el cliente depende totalmente de usted para explicar los beneficios. Es su criterio que hay una deuda técnica, y usted decide decidir cómo solucionarla y cuándo ha terminado. La deuda técnica está afectando su velocidad (futura), no la percepción del software por parte de los clientes. Si no hubiera deuda, sería más productivo. Y la velocidad que ha estado midiendo hasta ahora está mal, ya que debería haber tomado más tiempo para mantener el código en forma.

Creo que debería comunicar esto con su cliente, pero no es algo que esté bajo su control. Podría decir algo como esto: 'Hemos estado tomando algunos atajos hasta ahora, que tendremos que solucionar. Esto significa que nuestra velocidad disminuirá un poco en las próximas iteraciones, pero esto es para asegurarnos de que tengamos un software que pueda mantenerse a largo plazo ''.

El trabajo continuo en la función del cliente también ayudará a mantener su enfoque en mejorar el software para el cliente, en lugar de convertirse en una especie de ejercicio académico para encontrar el diseño perfecto (esto es algo con lo que personalmente lucho a veces).

Jaap
fuente
De acuerdo con esto. No es una característica porque no es asunto del cliente, y no es algo de lo que deberían estar al tanto (en mi experiencia, cuando el cliente sabe que está refactorizando / arreglando el código para pagar la deuda técnica, lo ven como una pérdida de tiempo y dinero , así que es mejor que no sepan que lo haces en absoluto).
Wayne Molina
+1 Este también es un punto de vista válido sobre el tema. Me gusta tratarlo como una característica porque luego encaja perfectamente con los mecanismos normales de planificación y seguimiento. Sin embargo, es difícil explicarle al cliente.
Steven A. Lowe
+1, esta es la única respuesta que aclara cómo se equivocará el cálculo de la velocidad cuando cuentes las "tareas del departamento técnico" como características.
Doc Brown
15

En mi humilde opinión, una tarea para eliminar la deuda técnica definitivamente no es una característica. Podría introducirse en el departamento de "error", pero estaría ampliando la definición de los términos, ya que de nuevo no resulta en cambios de comportamiento observables por los usuarios.

Simplemente lo llamaría una tarea de mantenimiento. En cualquier proyecto de desarrollo, hay muchas tareas de este tipo, como configurar un entorno de desarrollo / prueba, reunir datos de prueba, fusionar sucursales en SCM, etc. Ninguno de estos es observable directamente por los usuarios, pero el no realizarlos regularmente resulta en un mayor desarrollo costos y tasa de errores a largo plazo.

Sin embargo, puede no ser necesario manejarlos como tareas separadas (a menos que sean enormes, y / o no esté bajo presión para implementar nuevas funciones en este momento). Por lo general, puede ser mejor simplemente identificar cuándo una nueva característica requiere refactorizar / escribir pruebas unitarias, etc. y manejarlas como parte del desarrollo de la nueva característica. Esto puede ser más fácil de explicar tanto a la administración como a los usuarios finales (si quieren saber a qué se dedica su tiempo). Actualización: Además, ayuda a los desarrolladores a centrarse también en el valor de la refactorización. Es fácil dejarse llevar por la refactorización por el bien de la refactorización, por lo que es IMHO útil centrarse en el valor agregado que aporta una refactorización específica desde la perspectiva del cliente.

Péter Török
fuente
1
Estoy de acuerdo en que la refactorización de la deuda técnica debe incluirse cuando es requerida por una nueva función, pero leí esta pregunta como pagar deuda técnica independiente o antes de que sea requerida por una nueva función.
Steven A. Lowe
@ Steven, esa fue mi interpretación también. Vincular la amortización técnica de la deuda con una característica relacionada es solo una sugerencia.
Péter Török
3

Yo lo llamaría un improvement.

No es un error porque nada está roto.

Tampoco es una característica porque la refactorización no será una solicitud de su cliente. (¡porque funciona!)

La mayoría de los sistemas de seguimiento admiten un tipo de problema improvementde forma predeterminada, de lo contrario, probablemente pueda alterar los tipos de todos modos.

Wesley van Opdorp
fuente