¿Qué beneficios ha visto al ocuparse de la deuda técnica?


29

Este artículo sobre deuda técnica tiene algunos puntos positivos, que incluyen:

Trabajar en los "asuntos técnicos" funciona mejor cuando es impulsado por historias. Es probable que la base del código necesite trabajo en todas partes, pero la recompensa se recibirá solo donde se va a trabajar el código por razones de cara al usuario. Si ninguna historia va a pasar por un área irregular, trabajar en ella se desperdicia en gran medida.

Por lo tanto, prefiero el enfoque de tomar historias como de costumbre (pero probablemente menos de ellas), y seguir la "regla de boy scout" de abandonar el campamento mejor de lo que lo encontraste. En otras palabras, donde sea que nos lleven las historias, escribamos más pruebas, refactoricemos más agresivamente.

Este enfoque tiene al menos estas ventajas:

  • mantiene el flujo de historias "mejor sensible";
  • proporciona ayuda de todo el talento del equipo
  • proporciona a todo el equipo para aprender cómo mantener limpio el código;
  • enfoca la mejora exactamente donde se necesita;
  • no desperdicia la mejora que "puede" ser necesaria;

He visto que la calidad del código tiene un gran efecto en la productividad a largo plazo, por lo que creo que la deuda técnica debe ser atendida. Creo que la publicación anterior tiene sentido, pero no estoy tan seguro sobre los últimos dos puntos. Estoy interesado en descubrir experiencias reales de los beneficios de la limpieza de la deuda técnica, incluso si no estaba relacionada con las historias de los usuarios.

¿Qué beneficios positivos ha visto al limpiar su base de código y librarse de las deudas técnicas? ¿Qué métodos usaste para hacer el trabajo?


1
¿Por qué existiría el código, si no afecta una historia de usuario? (los administradores de un sistema siguen siendo usuarios, por lo tanto, el registro y las cosas "ocultas" todavía se aplican)
Steven Evers

2
@ Sn0rfus Ese es un buen punto. Sin embargo, he trabajado con equipos que se negaron a reconsiderar si algo que se consideró "funcionando" se hizo correctamente. Estos nunca se limpiarían porque las características se consideraban "hechas". A menudo tendrían grandes efectos indirectos en el desarrollo futuro porque se hicieron mal, pero los desarrolladores y nuestro gerente simplemente harían la vista gorda.
Nicole

(tu comentario sobre la limpieza) +1. Sé exactamente de lo que estás hablando.
talonx

Respuestas:


31

Puedo darte un ejemplo de mi experiencia.

Hace unos 10 o 12 años heredé una aplicación de un equipo de desarrolladores que terminó dejando la empresa (demasiado tiempo para entrar aquí ...). El sistema era un gran sistema de generación de informes de middleware de cosecha propia. Funcionaba todas las semanas y generaba alrededor de 2 docenas de informes Excel para altos ejecutivos de una compañía Fortune 500. Cuando lo heredé, tardé entre 5 y 6 horas en ejecutarse y durante una semana determinada fallaría al menos 2 noches.

No era un campista feliz por haber tenido este desastre.

Inicialmente, mi plan era solo detener el sangrado y corregir la causa principal de las fallas. Después de sentirme más cómodo con la base de código, comencé a buscar lugares donde pudiera refactorizar y agregar estabilidad y rendimiento. En el transcurso de 2 años más o menos, hice muchos, muchos cambios en el sistema. Retiramos ese sistema hace un par de años y en ese momento todo el proceso tardó 45 minutos en ejecutarse y no había generado ningún problema en años.

Se trabajó mucho para pagar la deuda técnica, pero valió la pena. Fue agradable no recibir llamadas telefónicas en medio de la noche que el sistema falló. Fue agradable entrar a la oficina en el monring y ver nada más que buenas noticias en los registros.

(Aparte ... Después de un par de años me encontré con uno de los principales desarrolladores de este sistema. Me preguntó cómo estaba funcionando y le dije lo malo que era el sistema. En realidad se disculpó y me dijo que sabía que sería un puñado de apoyo después de que se fue y deseó haber hecho un mejor trabajo en ello).


8
Ay, suena como una experiencia dolorosa, pero con un resultado positivo. Gracias por compartir.
Ali

11

Según mi experiencia, los beneficios de la limpieza del código son más notables cuando tengo que mantener el código donde no se ha realizado la limpieza. Cuando se ha realizado la limpieza, mis cambios consisten en leer el código, detectar uno o dos lugares que deben cambiarse e ir desde allí. Si la limpieza no se ha realizado, agregue un paso inicial de leer el código un par de veces e intente averiguar qué estaba pensando el autor (a veces yo) cuando lo escribió.


2
Estoy de acuerdo: la mejor recompensa generalmente no se ve y aumenta la productividad.
Michael K

5

La eliminación de la deuda técnica produce menos apoyo técnico y una mejor base para las mejoras.

siempre


44
Esto no es necesariamente cierto. Los últimos dos puntos en el comentario del OP significan que no debe trabajar en la refactorización de todos modos. Si encuentra que una pieza de código raramente usada está mal escrita y decide eliminar esa deuda técnica, eso significa que no puede agregar nueva funcionalidad o eliminar la deuda técnica en otro lugar, digamos en algún lugar que SI se usa mucho. La realidad es que tenemos un tiempo limitado y absolutamente tenemos que priorizar dónde y cuándo decidimos eliminar la deuda técnica.
Nemi

@Nemi: toda la deuda técnica no se crea igual; por favor usa el buen juicio.
Steven A. Lowe

1
Solo estaba comentando, ya sabes, por la gran negrita SIEMPRE en tu publicación. Supongo que tal vez no entendí tu respuesta.
Nemi

4

Una experiencia que tuve fue cuando administraba un equipo de rendimiento del sitio en mi empleador anterior. Todas las noches, durante un período de una hora a dos horas, el sitio web que mi equipo estaba monitoreando caería por debajo de los umbrales de rendimiento aceptables debido a que el bot raspaba rápidamente la información del sitio. Las medidas que tomó el equipo para abordar esto consistieron en iniciar sesión en un sistema de administración manual y bloquear las direcciones IP que estaban causando los problemas. No hace falta decir que esto le costó a un miembro del equipo horas de sueño casi todas las noches. Me di cuenta de lo que estaba ocurriendo y tomé el BlackBerry de guardia por varios días para ver qué tan malo era y dar un descanso a mi equipo.

Después de unos días, simplemente fui al dueño del equipo del negocio y les hice saber que si no implementamos un sistema de bloqueo automatizado para que los bots tengan un tiempo mucho más difícil que afecte el rendimiento del sitio, probablemente perderíamos algunos, si no todos, los miembros del equipo debido a fatiga y agotamiento. Estuvieron de acuerdo e implementamos un sistema que nos permitió dormir por la noche. El propietario del negocio entendió que el costo de unos días o una semana de desarrollo era mínimo en comparación con el costo de contratar / capacitar a nuevos ingenieros.


+1 por discutir el problema con el PO / BO. Así es como debería funcionar (idealmente :-)).
sleske

Y por cierto, ni siquiera llamaría a eso un ejemplo de deuda técnica. Esta es claramente una característica que falta, que su equipo tuvo que compensar mediante el trabajo manual. Mi definición sería: Si afecta al usuario final (directa o indirectamente), no es la deuda técnica, sino simplemente un error / característica faltante
sleske

2

Con respecto a los últimos dos puntos: entiendo de dónde viene, como se explica en su publicación original :

O, ¿es posible reasignar algunos desarrolladores para hacer estos asuntos técnicos, mientras el resto del equipo continúa con las cosas orientadas al usuario? Esto puede afectar la velocidad del equipo, pero ¿y qué?

"Y qué" es igual: el propietario del producto y otras personas del lado del negocio se vuelven infelices. Y cuando mamá es infeliz, todos son infelices.

Sin embargo, la línea entre lo que debe hacerse y lo que puede hacerse es bastante vaga. La cara del usuario es muy amplia e incluye el rendimiento y la aparición de errores. Pero en algunos casos, el problema subyacente del bajo rendimiento y la alta ocurrencia de errores radica en el código. Para decirlo en sus palabras: una historia puede no pasar por un área crujiente, pero esa área crujiente puede ocultar algunas cosas desagradables que atacan la historia en el camino limpio al lado.

Las cosas que no influyen en el rendimiento general son menos interesantes de limpiar, pero uno debe evaluar con mucho cuidado la influencia de esos puntos. La mayoría de las veces tienen una influencia indirecta que puede ser bastante sustancial.


2

El mayor beneficio que recibirá una organización como resultado de pagar la deuda técnica es evitar el interés compuesto. Hay un ejemplo en la entrada de blog a continuación que muestra cómo el monto del principal adeudado por una deuda técnica pasó de $ 160k a $ 430k en solo cinco años. Se necesitaría un programador de tiempo completo dedicado exclusivamente al servicio de esa cantidad de deuda. ¡Eso ayudará a ponerlo en perspectiva para los tomadores de decisiones!

De blog.acrowire.com .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.