¿Debería programarse la actualización técnica de deuda / tecnología como una característica (puntos dados) o una tarea (sin puntos)?

8

¿Qué debemos hacer para las historias de usuarios de deuda técnica en Pivotal Tracker? ¿Deberíamos considerar esto como características (dar puntos) o tareas (no dar puntos, por lo tanto, reducir la velocidad)?

Estoy confundido sobre lo que debería considerarse una tarea:

  1. Duplicación de código: está claro que si hemos colocado el mismo código en varios lugares, eso es realmente una mala práctica de código e indica que los desarrolladores del equipo deberían pensar más en hacer que el software sea mantenible, refactorizarlo y el equipo debería dedicar tiempo a las revisiones del código. Como todo esto requeriría madurez, tiempo y experiencia a nivel de código, es mejor entregar menos puntos para que la calidad del código no se vea comprometida. Entonces, tales errores deberían ser penalizados y la velocidad debería reducirse al no dar puntos a la tarea.

  2. Actualización de tecnología: como pasar a modular JS, HTTP2, React, MVC o cualquier otra tecnología nueva / mejor. Estos pasos mejorarán el rendimiento y el mantenimiento del código. ¿Pero debería ser esto una tarea o una característica? Creo que así es el mundo de la tecnología, las nuevas tecnologías vienen de vez en cuando y hay que migrar a él. Entonces, no veo ningún punto en penalizar la velocidad del equipo para tal trabajo. Sugerencias?

  3. Duplicación / Código de subestándar en código heredado: pocos códigos permanecen intactos desde hace mucho tiempo O cuando se forma un nuevo equipo pero la base de código es un poco vieja, nos enfrentamos a este desafío. El equipo dice que no han codificado esta sección, entonces, ¿por qué debería penalizarse su velocidad al elegir deudas técnicas como nunca crearon esas deudas?

  4. Código subestándar debido a la urgencia empresarial: a veces, los desarrolladores se ven obligados a implementar características lo antes posible en vivo debido a la presión de los competidores / objetivos / negocios / usuarios. ¿Debería considerarse la limpieza de un código tan malo como una tarea (sin dar puntos) también? Esta vez, el equipo de desarrollo no tiene la culpa, entonces, ¿por qué debería reducirse su velocidad, cuando en realidad dedican más horas en tales casos?

Creo que todos los tipos de tareas mencionadas anteriormente, si se hacen con prudencia, deberían mejorar la velocidad del equipo en el futuro. Pero, ¿cómo debemos mantener el equilibrio b / w manteniendo la velocidad del equipo y penalizando los errores técnicos que el equipo está cometiendo al tomar malas decisiones?

La pregunta es similar a: ¿Debería programarse la deuda técnica como una característica o una tarea (o un error)? , pero no encontré respuestas convincentes que cubran los 4 puntos, así que lo vuelvo a publicar de una manera diferente.

disidente
fuente
2
Si en realidad no está ofreciendo nuevas funciones para los usuarios finales, no es una característica. Una caída en la velocidad debido a una elección del equipo para pagar la deuda técnica no es una penalidad, es información útil. (Divulgación: Soy un pivote.)
jonrsharpe
2
Sus usuarios probablemente no se preocupan por su SEO. Tal vez el rendimiento, si ha validado un requisito del usuario para mejorar los tiempos de carga, sería una característica. Pero refactorizar o cambiar de plataforma, presumiblemente con la esperanza de que pueda ofrecer mejores funciones más rápido en el futuro no es una característica; "recuperarás esos puntos" cuando entregues esas características.
jonrsharpe
2
@jonrsharpe: a pesar del cuidado y la alimentación de sus usuarios, ¿por qué programaría algo sin asignarle un costo? No me convence la idea de perder misteriosamente la velocidad debido a la deuda técnica que se está pagando sin puntos de historia solo por el "correcto".
Robert Harvey
2
Votar para cerrar como principalmente basado en la opinión. De cualquier manera está bien, y al final todo esto es papeleo para ayudarlo a hacer las cosas.
Telastyn
1
@sahil: Ay. Incurrir en deudas técnicas es algo que a menudo puede estar fuera del control del desarrollador de software. Las presiones administrativas para lanzar software en una fecha determinada pueden ser una de las razones. ¿Por qué deberían ser penalizados por eso? Si vale la pena hacerlo, vale la pena asignar un costo.
Robert Harvey

Respuestas:

8

Respuesta corta: pagar la deuda técnica es una tarea difícil. No está ofreciendo una nueva funcionalidad para los usuarios finales, por lo que no se señala.


Respuesta oficial:

Los errores y las tareas no son estimables por defecto

Las historias destacadas se estiman porque contribuyen al valor comercial. Los errores y las tareas se consideran parte de la sobrecarga normal del producto de software: surgen con el tiempo y son sobrecarga continua, un costo continuo de hacer negocios. El cálculo automático de velocidad de Tracker lo considera un costo incorporado y estima cuánto trabajo valorado por el negocio se puede completar en cada iteración. Esto le permite enfocar su planificación en el valor comercial, el riesgo y las prioridades. Por lo tanto, los errores y las tareas en Tracker normalmente no se estiman. Puede habilitar la estimación de errores y tareas en la Configuración del proyecto; sin embargo, desaconsejamos encarecidamente activar la estimación de errores y tareas. No puede apagarlo más tarde si cambia de opinión.

https://www.pivotaltracker.com/help/articles/planning_with_velocity/#bugs_and_chores

Es por eso que las historias clasificadas como errores y tareas no pueden tener estimaciones asignadas con la configuración predeterminada de PT, pero creo que también explica por qué no debe contar estas tareas como características solo para obtener puntos para ellas.


En primer lugar, no creo que debas considerar una caída en la velocidad como una penalización: es solo información. Tal vez fue algo natural, como una nueva persona uniéndose a la que tuviste que pasar más tiempo entrenando. Tal vez fue algo inesperado que redujo su capacidad (p. Ej., Enfermedad) o consumió más (p. Ej., Error "detener el mundo"). Tal vez simplemente no había estimado bien las características, por cualquier razón; Esto es algo de lo que puedes aprender. O tal vez fue porque decidió, como equipo, priorizar el pago de una deuda técnica sobre la entrega de nuevas características (y tal vez incurrir en más deuda).

En segundo lugar, no es necesariamente un error incurrir en deuda técnica. No es ideal incurrir en él accidentalmente , pero si decide, por ejemplo, construir la cosa "rápida y sucia" ahora sabiendo que tendrá que arreglarlo más tarde, por ejemplo, para que pueda obtener más comentarios de los usuarios o cumplir con un duro fecha límite, esa es una elección deliberada que has hecho como equipo y está bien.

En cuanto a si algo debería ser una característica, una regla general simple es: ¿les importa a los usuarios finales? Mencionas mejorar el SEO: ¿es algo en lo que están interesados? Es posible que les interese el rendimiento, pero por otro lado tal vez prefieran tener alguna característica nueva que las mismas cosas con unos cientos de milisegundos de tiempo de carga. Investigue un poco: vaya y pregúnteles qué quieren. Permita que lo ayuden a priorizar en qué es mejor pasar el tiempo del equipo.

Puede decidir que sus opciones tecnológicas actuales le impiden entregar ciertas funciones de la manera más eficiente que desee, en cuyo caso es perfectamente razonable (una vez más, deliberadamente) pasar tiempo migrando toda o parte de la aplicación a algo nuevo.

Creo que todos los tipos de tareas mencionadas anteriormente, si se hacen con prudencia, deberían mejorar la velocidad del equipo en el futuro.

Aquí estoy absolutamente de acuerdo con usted, pero ¿no está obteniendo puntos por estos quehaceres? Si está haciendo el trabajo para poder ofrecer más funciones más adelante, entonces debería ver la mayor velocidad después de haberlo hecho, no mientras lo hace.

Además, cosas como las revisiones de código y la refactorización básica en el proceso de entrega (por ejemplo, la parte "refactor" del ciclo TDD) ya deberían ser parte de su trabajo continuo y, por lo tanto, ya deberían estar incluidas como parte de la velocidad general del equipo.


Divulgación : Soy un Pivot, trabajo para Pivotal Labs en Londres, pero no en el equipo Tracker.

jonrsharpe
fuente
Las historias tampoco son estimables. Esa es la razón por la cual existen puntos y velocidades de la historia.
Robert Harvey
@RobertHarvey lo siento, para que quede claro que la cita no dice que es imposible estimar errores y tareas (¡o es posible estimar características, para el caso!) Pero que, por defecto, en PT no puede asignar una estimación a una historia que no está clasificado como una característica.
jonrsharpe
77
"No está ofreciendo nuevas funcionalidades para los usuarios finales, por lo que no se apunta". Cumplir con este dogma es la mecánica principal detrás de la acumulación de deuda técnica. El trabajo se estima y se realiza para los interesados ​​que no son necesariamente usuarios finales. Puede tener una historia como "Refactorizar este código (qué), para mantenerlo mantenible (por qué) para el equipo de desarrollo (para quién)".
Martin Maat
1
@MartinMaat no estoy de acuerdo; decir que la velocidad nunca debe caer haría eso. Eres libre de escribir tus tareas de la misma manera que tus funciones, pero eso no les da valor para el usuario.
jonrsharpe
@MartinMaat De acuerdo al 100%. Esto me recuerda EXACTAMENTE a la charla de "trampas de responsabilidad" de Eric Evans de InfoQ hace algunos años. infoq.com/presentations/design-strategic-eric-evans
RibaldEddie
4

Solo para ser contrario, manejamos errores y deudas técnicas como cualquier otro PBI. De hecho, ni siquiera tenemos un tipo de "error". Todo es un PBI. Nuestra cartera de pedidos está ordenada por el valor comercial asignado al PBI. Como resultado, se le asignará un alto valor comercial a un error importante del usuario que está causando problemas, ya que corre el riesgo de perder dinero con algo así, y es probable que sea una de las primeras cosas que se haga. Por otro lado, un error que realmente no tiene mucho impacto y no está afectando el resultado final tendrá un valor comercial relativamente bajo y es posible que no se solucione por un tiempo. Esa es una pared mental importante que debe derribarse: no todos los errores deben repararse. Suena como un sacrilegio, lo sé, pero si el esfuerzo involucrado en la reparación del error es más que el valor comercial que lo arreglará, entonces el ROI es negativo. Tratar todo como un PBI le da la libertad de tomar este tipo de decisiones empíricas sin distraerse solo porque es un "error".

Del mismo modo, con la deuda técnica, todavía queda mucho valor comercial en juego. Algunas deudas técnicas pueden incurrir con un costo muy bajo y pueden permanecer a largo plazo, pero algunas deudas técnicas matarán su negocio con el tiempo y, por lo tanto, tienen un valor comercial muy alto. La clave nuevamente es darse cuenta de que todo es solo un PBI. Todo entra en la cartera de pedidos y usted trabaja en los elementos de esa cartera de pedidos en función del valor que agregan a la empresa. Ya sea una característica, un error o una deuda técnica, realmente no viene al caso.

Esto también tiene el beneficio de eludir su pregunta por completo. Como todo es un PBI, todo contribuye a la velocidad. La idea de hacer un trabajo que en realidad no está dimensionado y contado en su velocidad es algo loco para mí. Básicamente, estás creando un gran agujero negro en tus datos empíricos. La velocidad ya es una métrica bastante aproximada, es una estimación basada en una estimación basada en aún más estimaciones. Agregue un montón de cantidad variable de trabajo que no se rastrea, y ahora el número no tiene sentido. Todo lo que hace tu equipo en un sprint es parte de tu velocidad.

Chris Pratt
fuente