Jump to content

Deuda técnica: Difference between revisions

From Scrum Manager BoK
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
'''Deuda técnica''' es un neologismo empleado en el sector profesional TIC para describir la deuda de trabajo que se adquiere al producir código pobre, incumpliendo prácticas aconsejadas para el desarrollo de software.  
{{Meta-bok|min=5}}
==Descripción==
La '''deuda técnica''' es el coste diferido que se asume cuando se elige una solución más rápida pero de menor calidad en lugar de la más adecuada. Al igual que una deuda financiera, genera "intereses": cuanto más tiempo pasa sin resolverse, más trabajo adicional requiere mantener, extender o corregir el código afectado.
Los proyectos que actúan de esta forma, normalmente para atajar los tiempos de entrega adquieren una "deuda técnica", cuyos "intereses" se tendrán que acabar pagando, y supondrán mayor cuantía cuanto más tiempo pase.


La deuda técnica suele '''materializarse en las siguientes formas:'''
El término fue acuñado por Ward Cunningham en 1992 a partir de una analogía con el crédito financiero: igual que un préstamo permite obtener liquidez a corto plazo a costa de intereses futuros, las soluciones técnicas incompletas o deficientes proporcionan un beneficio inmediato —entregar antes— pero generan un coste creciente que tarde o temprano hay que afrontar.
* Documentación escasa, incompleta o inservible.
 
* Errores.
== Por qué se genera ==
 
La deuda técnica no siempre es producto del descuido. Puede surgir de decisiones conscientes y justificadas:
 
* Necesidad de entregar antes de una fecha crítica, aceptando que habrá que volver a mejorar el código.
* Falta de conocimiento en el momento de implementar: lo que era la mejor solución disponible entonces no lo es después de aprender más.
* Cambios en los requisitos que hacen que código bien escrito deje de ser adecuado.
* Presión externa que sacrifica calidad técnica por velocidad percibida.
 
Lo que convierte la deuda técnica en un problema no es que exista, sino que no se gestione.
 
== Manifestaciones habituales ==
 
* Documentación escasa, incompleta o desactualizada.
* Errores conocidos y no resueltos.
* Ausencia o deficiente control de versiones.
* Ausencia o deficiente control de versiones.
* Arquitectura no escalable.
* Arquitectura no escalable.
* Rigidez para actualizar a nuevas tecnologías o plataformas.
* Rigidez para actualizar a nuevas tecnologías o plataformas.
==Origen y evolución==
* Pruebas insuficientes o de mala calidad.
El término deuda técnica surge de una analogía utilizada por Ward Cunningham en 1992 en la que realiza la equivalencia entre un desarrollo de software que presentase determinadas carencias debido, generalmente, a la necesidad de realizar una entrega temprana, con la petición de un crédito financiero.
* Código duplicado o sin refactorizar.
 
== Clasificación ==
 
Las deudas técnicas pueden clasificarse en dos dimensiones:
 
* '''Advertidas vs. inadvertidas:''' si el equipo es consciente de la deuda en el momento en que se genera o no lo descubre hasta más tarde.
* '''Prudentes vs. imprudentes:''' si se realizó un análisis de coste-beneficio antes de aceptarla o se asumió sin evaluación.
 
La deuda advertida y prudente es gestionable: el equipo sabe que existe, sabe por qué y puede planificar cuándo abordarla. La deuda inadvertida e imprudente es la más peligrosa porque es invisible hasta que genera problemas.
 
== El diario de deuda técnica ==
 
Una herramienta habitual para gestionar la deuda técnica advertida es el '''diario de deuda técnica''': una lista que registra las deudas conocidas con su contexto y su fecha de detección. Una opción muy extendida es usar las listas de tareas de los entornos de desarrollo, que escanean automáticamente el código en busca de etiquetas como:
 
* '''FIXME:''' código que falla o puede fallar en determinadas circunstancias.
* '''TODO:''' mejoras a realizar en el futuro.
* '''NOTE:''' funcionamiento interno o dificultades no documentadas.
* '''XXX / KLUDGE / HACK:''' código ineficiente o poco elegante que funciona pero no está bien resuelto.
 
Incluir la fecha en el comentario facilita el seguimiento. Con esta información el equipo puede decidir cuándo ha llegado el momento de detener el avance de nuevas funcionalidades para saldar la deuda acumulada.
 
== Deuda técnica y la IA generativa ==
 
La adopción masiva de herramientas de generación de código está creando un nuevo vector de deuda técnica que los equipos deben aprender a gestionar:
 
El [[vibe coding]] —escribir código conversacionalmente con un asistente de IA hasta que "funciona"— es extraordinariamente productivo para prototipos y funcionalidades simples. El problema es que genera deuda técnica a una velocidad sin precedentes: el código producido tiende a ser poco modular, con duplicaciones, sin cobertura de pruebas y difícil de mantener.
 
Un estudio de METR publicado en julio de 2025 con 16 desarrolladores experimentados encontró que cuando usaban herramientas de IA en sus propios repositorios de código, tardaban un 19% más en completar sus tareas, aunque creían haber ido un 20% más rápido. La percepción de velocidad no coincidía con la realidad medida.
 
<div class="bok-aviso">
La IA genera código rápido. La [[refactorización]], las pruebas y la [[revisión por pares]] siguen siendo responsabilidad humana. Sin ellas, la deuda técnica crece de forma exponencial, no lineal: a más código generado sin revisar, más difícil y costoso resulta cada nueva modificación. La [[Definición de hecho|DoD reforzada]] para equipos con IA existe precisamente para contener este riesgo.
</div>
 
== Error frecuente ==
 
<div class="bok-aviso">
'''Tratar la deuda técnica como algo que "ya se arreglará cuando haya tiempo".''' El tiempo para arreglar la deuda técnica nunca llega si no se planifica: siempre hay funcionalidades nuevas que compiten por la capacidad del equipo. La deuda no pagada genera intereses crecientes que reducen progresivamente la velocidad del equipo. La práctica recomendada es reservar una proporción de la capacidad de cada sprint para saldar deuda técnica antes de que se vuelva inmanejable.
</div>


Esta analogía ha sido ampliamente extendida ya que de igual forma que dicho crédito permitiría obtener liquidez a corto plazo a costa de generar unos intereses a liquidar durante un período de tiempo prolongado, las carencias introducidas durante el desarrollo del software proporcionan un beneficio a corto plazo (la entrega a tiempo de una versión del software) pero tarde o temprano requerirán gastar el tiempo inicialmente ahorrado sumado a un esfuerzo extra (los intereses), es decir, dichas carencias generarán una deuda técnica con los mismos aspectos negativos que los intereses del crédito financiero solicitado.
== Véase también ==
==Clasificación==
Las deudas técnicas se pueden clasificar en:
*'''Advertidas o inadvertidas.''' Si se atiende al reconocimiento o no de la deuda en el momento en que esta se da.
*'''Prudentes o imprudentes.''' Si se atiende a la realización o no de un análisis de costo frente a beneficios.
===Ejemplos===
A pesar de los tipos de deuda técnica y de que cada equipo tendrá que atender sus propias carencias durante el desarrollo de sus proyectos de software, a continuación se listan algunos ejemplos típicos de deudas técnicas:
*Errores conocidos y no solucionados.
*Mejoras en el código no implementadas.
*Insuficientes pruebas o pruebas de mala calidad.
*Documentación desactualizada, incompleta o inexistente.
==El diario de deuda técnica==
Es una herramienta que permite conocer la deuda técnica advertida, acumulada en cualquier momento del proyecto.


Una opción muy extendida para llevar este tipo de diarios es utilizar las listas de tareas que habitualmente incorporan los entornos de desarrollo, las cuales escanean automáticamente el código en busca de comentarios con etiquetas en un formato particular y que, a partir de los hallazgos encontrados, generan un lista. Habitualmente, los entornos de desarrollo suelen aceptar las siguientes '''etiquetas''':
<div class="bok-tags">
*'''FIXME:''' permite marcar una porción de código problemático (se sabe que en determinadas circunstancias falla o puede fallar) y que por tanto requiere una especial atención y/o revisión posterior.
[[Refactorización]] [[TDD]] [[Agilidad técnica]] [[Definición de hecho]] [[Pair programming]] [[Deuda técnica]] [[KISS]] [[Integración continua]]
*'''NOTE:''' permite indicar el funcionamiento interno de código o posibles dificultades que no están documentadas.
</div>
*'''TODO:''' indica posibles mejoras a realizar en un futuro más o menos próximo.
*'''XXX, KLUDGE, KLUGE o HACK:''' cualquiera de ellos advierte de código ineficiente, poco elegante o incluso insondable, pero que, sin embargo, funciona.


Para evitar el riesgo de que estas anotaciones se acumulen con el tiempo (o lo que es lo mismo, de que la deuda técnica se acumule) puede resultar útil incluir la fecha al comentario asociado a la etiqueta para facilitar su seguimiento. Además, también puede resultar interesante anotar el número de veces que esa porción de código ha provocado algún tipo de problema.
<div class="bok-ecosistema">
<div class="texto">
<span class="titulo">'''¿Quieres avanzar en agilidad?'''</span>
<span class="sub">Puedes buscar convocatorias de cursos y exámenes o ir a tu ritmo haciéndote miembro del Club Agile. Esta membresía incluye recursos exclusivos, aulas e-learning y acceso a [https://scrummanager.com/skillarena/ '''Skill Arena''']: un espacio para practicar y medir tus habilidades ágiles a tu ritmo.</span>
</div>
<div class="botones">
<div class="bok-btn-outline">[https://www.scrummanager.com/website/c/calendar/show-courses.php Buscar convocatorias]</div>
<div class="bok-btn-filled">[https://scrummanager.com/club/ Club Agile]</div>
</div>
</div>


Con toda esta información será posible determinar, en cada momento, la cantidad de deuda técnica que acumula un proyecto para determinar, así mismo, cuando ha llegado el momento de detenerse a resolver cada uno de los problemas de los que se compone.
==Véase también==
*[[Modelo original de Scrum para desarrollo de software]].
*[[Crisis del software]].
[[Category:Glosario de términos]]
[[Category:Glosario de términos]]
[[Category:Prácticas técnicas]]

Latest revision as of 15:01, 14 May 2026

⏱ 5 min de lectura  ·  📅 Actualizado en 2026

La deuda técnica es el coste diferido que se asume cuando se elige una solución más rápida pero de menor calidad en lugar de la más adecuada. Al igual que una deuda financiera, genera "intereses": cuanto más tiempo pasa sin resolverse, más trabajo adicional requiere mantener, extender o corregir el código afectado.

El término fue acuñado por Ward Cunningham en 1992 a partir de una analogía con el crédito financiero: igual que un préstamo permite obtener liquidez a corto plazo a costa de intereses futuros, las soluciones técnicas incompletas o deficientes proporcionan un beneficio inmediato —entregar antes— pero generan un coste creciente que tarde o temprano hay que afrontar.

Por qué se genera

La deuda técnica no siempre es producto del descuido. Puede surgir de decisiones conscientes y justificadas:

  • Necesidad de entregar antes de una fecha crítica, aceptando que habrá que volver a mejorar el código.
  • Falta de conocimiento en el momento de implementar: lo que era la mejor solución disponible entonces no lo es después de aprender más.
  • Cambios en los requisitos que hacen que código bien escrito deje de ser adecuado.
  • Presión externa que sacrifica calidad técnica por velocidad percibida.

Lo que convierte la deuda técnica en un problema no es que exista, sino que no se gestione.

Manifestaciones habituales

  • Documentación escasa, incompleta o desactualizada.
  • Errores conocidos y no resueltos.
  • Ausencia o deficiente control de versiones.
  • Arquitectura no escalable.
  • Rigidez para actualizar a nuevas tecnologías o plataformas.
  • Pruebas insuficientes o de mala calidad.
  • Código duplicado o sin refactorizar.

Clasificación

Las deudas técnicas pueden clasificarse en dos dimensiones:

  • Advertidas vs. inadvertidas: si el equipo es consciente de la deuda en el momento en que se genera o no lo descubre hasta más tarde.
  • Prudentes vs. imprudentes: si se realizó un análisis de coste-beneficio antes de aceptarla o se asumió sin evaluación.

La deuda advertida y prudente es gestionable: el equipo sabe que existe, sabe por qué y puede planificar cuándo abordarla. La deuda inadvertida e imprudente es la más peligrosa porque es invisible hasta que genera problemas.

El diario de deuda técnica

Una herramienta habitual para gestionar la deuda técnica advertida es el diario de deuda técnica: una lista que registra las deudas conocidas con su contexto y su fecha de detección. Una opción muy extendida es usar las listas de tareas de los entornos de desarrollo, que escanean automáticamente el código en busca de etiquetas como:

  • FIXME: código que falla o puede fallar en determinadas circunstancias.
  • TODO: mejoras a realizar en el futuro.
  • NOTE: funcionamiento interno o dificultades no documentadas.
  • XXX / KLUDGE / HACK: código ineficiente o poco elegante que funciona pero no está bien resuelto.

Incluir la fecha en el comentario facilita el seguimiento. Con esta información el equipo puede decidir cuándo ha llegado el momento de detener el avance de nuevas funcionalidades para saldar la deuda acumulada.

Deuda técnica y la IA generativa

La adopción masiva de herramientas de generación de código está creando un nuevo vector de deuda técnica que los equipos deben aprender a gestionar:

El vibe coding —escribir código conversacionalmente con un asistente de IA hasta que "funciona"— es extraordinariamente productivo para prototipos y funcionalidades simples. El problema es que genera deuda técnica a una velocidad sin precedentes: el código producido tiende a ser poco modular, con duplicaciones, sin cobertura de pruebas y difícil de mantener.

Un estudio de METR publicado en julio de 2025 con 16 desarrolladores experimentados encontró que cuando usaban herramientas de IA en sus propios repositorios de código, tardaban un 19% más en completar sus tareas, aunque creían haber ido un 20% más rápido. La percepción de velocidad no coincidía con la realidad medida.

La IA genera código rápido. La refactorización, las pruebas y la revisión por pares siguen siendo responsabilidad humana. Sin ellas, la deuda técnica crece de forma exponencial, no lineal: a más código generado sin revisar, más difícil y costoso resulta cada nueva modificación. La DoD reforzada para equipos con IA existe precisamente para contener este riesgo.

Error frecuente

Tratar la deuda técnica como algo que "ya se arreglará cuando haya tiempo". El tiempo para arreglar la deuda técnica nunca llega si no se planifica: siempre hay funcionalidades nuevas que compiten por la capacidad del equipo. La deuda no pagada genera intereses crecientes que reducen progresivamente la velocidad del equipo. La práctica recomendada es reservar una proporción de la capacidad de cada sprint para saldar deuda técnica antes de que se vuelva inmanejable.

Véase también

¿Quieres avanzar en agilidad? Puedes buscar convocatorias de cursos y exámenes o ir a tu ritmo haciéndote miembro del Club Agile. Esta membresía incluye recursos exclusivos, aulas e-learning y acceso a Skill Arena: un espacio para practicar y medir tus habilidades ágiles a tu ritmo.