Deudas técnicas

El término deuda técnica lo acuñó Ward Cunningham para referirse a las “licencias” que se toma un programador en el desarrollo del programa para lograr cerrar una versión.

Las “licencias” tienen la forma de código mal escrito, un abuso de estructuras auxiliares, clases sobrecargadas o cualquier “arreglo” que acorte el tiempo de desarrollo. Cada una de estas licencias, genera una deuda del programador para con su código.

Al igual que una deuda monetaria, si acumulamos demasiadas deudas, terminaremos en bancarrota, lo cual se traduce en un proyecto inmantenible o con un costo de desarrollo tal alto que hasta deja de ser rentable una nueva versión.

La recomendación general es minimizar la cantidad de deudas técnicas adquiridas (si un proyecto nos obliga a tomar demasiadas, entonces el problema viene más por el lado del cronograma que con el desarrollo) y tratar de solucionarlas cuanto antes. La deuda técnica sin solución puede acarrear “intereses” tales como diseños derivados de un mal planteo, lo que hará más difícil volver después a cubrirla.

Algo muy importante: La deuda técnica nace fruto de la decisión del programador. SIEMPRE. Como tal es recogida en un listado para su posterior corrección. No se debe llamar deuda técnica a cualquier desastre de código surgido más por ignorancia que por una decisión pensada. Volver de una deuda pensada puede tomar un tiempo, pero finalmente puede ser saldada. Volver de un desastre hecho sin criterio puede ser tan difícil como impracticable.

Citando a Uncle Bob:

Cuando decidas tomar una deuda técnica, más vale que tu código esté de punta en blanco. Mantener el sistema claro es la única forma de poder pagar esa deuda

Sobre este tema, escribieron los que saben:
http://martinfowler.com/bliki/TechnicalDebt.html
http://martinfowler.com/bliki/TechnicalDebtQuadrant.html
http://programmer.97things.oreilly.com/wiki/index.php/Act_with_Prudence
http://blog.objectmentor.com/articles/2009/09/22/a-mess-is-not-a-technical-debt

Leave a Reply

Your email address will not be published. Required fields are marked *