← Volver a todos los artículos
Guías

Deuda Técnica: Cuándo (y Por Qué) Externalizar la Refactorización es la Mejor Inversión

Por Marc Molas·16 de diciembre de 2024·9 min de lectura

"Ya lo limpiamos después." Las palabras más repetidas en toda startup de software. Y las que menos veces se cumplen.

La deuda técnica se acumula en silencio. Al principio ni la notas. Un atajo aquí para llegar al deadline, un workaround allá porque no había tiempo de hacerlo bien, un test que nadie escribió porque el lanzamiento era mañana. Cada decisión por separado es razonable. El problema es que se suman.

Y un día te das cuenta de que los despliegues tardan dos horas. Que un ingeniero nuevo tarda tres semanas en hacer su primer commit productivo. Que cada funcionalidad nueva introduce dos bugs. Que tus mejores ingenieros empiezan a mirar ofertas en LinkedIn porque están hartos de luchar contra el código en vez de construir producto.

Ese día ya llegó tarde para actuar. Pero más tarde será peor.

Qué es realmente la deuda técnica (y qué no es)

Ward Cunningham acuñó el término como una metáfora financiera, y es perfecta. La deuda técnica funciona exactamente como la deuda financiera: tomas un préstamo (atajo técnico) para conseguir algo hoy (entregar más rápido), y pagas intereses (complejidad acumulada) hasta que devuelves el principal (refactorizas).

Hay dos tipos fundamentales:

Deuda deliberada. Atajos tomados conscientemente para ganar velocidad. "Sabemos que este módulo de pagos debería tener su propia capa de abstracción, pero ahora mismo lo acoplamos directo para llegar al lanzamiento." Esto es legítimo. Todo el mundo lo hace. El problema es cuando nadie anota que hay que volver a pagarlo.

Deuda accidental. Código que se degradó por falta de experiencia, por falta de revisión, o simplemente por entropía natural del software. Nadie decidió conscientemente crear un god object de 3.000 líneas — fue creciendo sprint a sprint sin que nadie se detuviera a refactorizar.

Ambos tipos acumulan intereses. La diferencia es que la deuda deliberada al menos la conoces. La accidental suele descubrirse cuando ya es cara de pagar.

El coste real de ignorarla

La deuda técnica no es un problema estético. Es un problema de negocio con costes medibles:

Velocidad de entrega en caída libre. Lo que en el mes 3 del producto tardaba dos días, en el mes 18 tarda dos semanas. No porque el equipo sea peor, sino porque cada cambio requiere entender capas de complejidad acumulada, navegar dependencias ocultas y rezar para que no se rompa algo inesperado.

Bugs compuestos. En un codebase limpio, un bug es un bug. En un codebase con deuda técnica, un bug es un síntoma de un problema estructural que produce más bugs. Arreglas uno y aparecen tres porque la causa raíz está en un diseño que nadie se atreve a tocar.

Frustración del equipo. Los buenos ingenieros quieren construir cosas, no luchar contra un codebase hostil. Cuando tu equipo pasa más tiempo parcheando y navegando código espagueti que creando valor, la moral cae. Y cuando la moral cae, la gente se va. La rotación en equipos con alta deuda técnica es significativamente más alta, y reemplazar a un ingeniero senior cuesta entre 6 y 9 meses de su salario.

Dificultad para contratar. Los buenos ingenieros hacen preguntas sobre el codebase en las entrevistas. Si la respuesta honesta es "es un desastre pero estamos trabajando en ello" y no hay un plan real, los mejores candidatos eligen otra oferta.

Riesgo de seguridad. Dependencias sin actualizar, configuraciones legacy, código que nadie entiende del todo — la deuda técnica es también deuda de seguridad. Y esa deuda se cobra con incidentes.

Por qué tu equipo interno no puede resolver esto solo

Si la deuda técnica tiene costes tan claros, ¿por qué no la paga el equipo que la generó? Porque hay fuerzas sistémicas que lo impiden:

La presión de producto siempre gana. En el sprint planning, "refactorizar el módulo de autenticación" compite contra "implementar la funcionalidad que pidió el cliente más grande". Adivina cuál gana siempre. La refactorización se pospone sprint tras sprint, trimestre tras trimestre.

El equipo no puede hacer ambas cosas. Refactorizar código legacy requiere concentración profunda. Construir funcionalidades nuevas también. Pedirle a un equipo que haga ambas cosas simultáneamente es pedirle que haga ambas mal. El context switching entre "construir nuevo" y "arreglar viejo" destruye la productividad.

Ceguera de familiaridad. Tu equipo vive dentro de ese código todos los días. Han normalizado sus problemas. El workaround que hicieron hace un año para evitar un bug se convirtió en "así funciona el sistema". Un patrón que un ingeniero externo identificaría como antipattern en diez minutos, el equipo interno lo ve como "la forma en que hacemos las cosas".

Falta de distancia emocional. El código lo escribieron ellos. Refactorizarlo implica admitir que se hizo mal. Eso es incómodo. Un equipo externo no tiene ese bagaje — ve código, no historia personal.

El caso para externalizar la refactorización

Externalizar la refactorización no es admitir fracaso. Es la decisión estratégica más rentable que puedes tomar cuando tu equipo no tiene la capacidad de abordarla internamente.

Ojos frescos. Un equipo externo de ingenieros senior llega sin preconcepciones. Ve los antipatrones que tu equipo ha normalizado. Identifica las dependencias circulares que nadie dibujó en un diagrama. Encuentra el código muerto que nadie se atreve a borrar "por si acaso". Esa perspectiva externa es imposible de replicar internamente.

Foco dedicado. Mientras tu equipo interno sigue entregando funcionalidades — porque el negocio no para —, el equipo de refactorización trabaja exclusivamente en la deuda técnica. Sin sprint planning que les obligue a elegir entre feature y refactor. Sin context switching. Foco puro en dejar el codebase mejor de lo que lo encontraron.

Engagement acotado en el tiempo. No es un compromiso indefinido. Son 4 a 8 semanas de trabajo enfocado con objetivos claros y entregables medibles. "Al final de este engagement, el pipeline de CI tarda menos de 10 minutos, la cobertura de tests está por encima del 70%, y los tres módulos más acoplados tienen interfaces claras." Si los objetivos se cumplen, el engagement termina. Si hay más trabajo, se extiende con alcance definido.

Transferencia de conocimiento. Un equipo de refactorización serio no solo deja código mejor — deja documentación. ADRs (Architecture Decision Records) explicando por qué se tomó cada decisión. Mejoras en el pipeline de CI/CD. Guías de estilo que no existían. Cuando el equipo externo se va, el equipo interno hereda un codebase mejor Y mejores prácticas para mantenerlo así.

Qué priorizar: lo que bloquea, no lo que ofende

No toda la deuda técnica merece atención inmediata. El código feo pero funcional puede esperar. Lo que no puede esperar es lo que bloquea a tu equipo:

Pipeline de CI lento. Si tu pipeline tarda 40 minutos, cada ingeniero pierde tiempo esperando, pierde contexto y pierde flujo. Reducirlo a 10 minutos multiplica la productividad de todo el equipo.

Tests frágiles o inexistentes. Si el equipo no se atreve a refactorizar porque no hay tests que les den confianza, estás en un círculo vicioso. Tests fiables son la base de cualquier mejora.

Dependencias enredadas. Si cambiar el módulo A siempre rompe el módulo B sin razón aparente, esa dependencia oculta es la prioridad. Separar esas dependencias desbloquea la capacidad de trabajar en paralelo.

Onboarding lento. Si un ingeniero nuevo tarda tres semanas en ser productivo porque nadie entiende cómo funciona el sistema, la documentación y la simplificación de la arquitectura tienen ROI inmediato.

Código que es feo pero funciona, que tiene nombres de variables poco descriptivos, que usa un patrón antiguo pero estable — eso puede esperar. Prioriza por impacto en productividad, no por ofensa estética.

El cálculo de ROI

Haz los números. Son más favorables de lo que piensas.

Supongamos que tu equipo de 6 ingenieros pierde, de media, 5 horas por semana cada uno luchando contra deuda técnica. Son 30 horas semanales. A un coste cargado de 60 euros la hora, son 1.800 euros por semana. 7.200 euros al mes. 86.400 euros al año. Perdidos en fricción.

Un engagement de refactorización de 6 semanas con dos ingenieros senior dedicados puede costar entre 25.000 y 40.000 euros. Si ese engagement reduce la fricción a la mitad — que es un objetivo conservador —, recuperas la inversión en menos de seis meses. Y los beneficios se acumulan cada mes después de eso.

Los números reales variarán según tu caso, pero la estructura del cálculo es siempre la misma: tiempo perdido por el equipo actual multiplicado por duración multiplicado por coste. Incluso mejoras modestas se pagan solas.

Un engagement que deja tu codebase mejor

En Conectia, conectamos startups europeas con ingenieros senior de LATAM que hacen exactamente este tipo de trabajo. No son ingenieros que llegan a leer código durante dos semanas y entregan un documento de recomendaciones. Son ingenieros que abren PRs, escriben tests, refactorizan módulos, mejoran pipelines y documentan decisiones.

El modelo es engagement acotado: objetivos claros, duración definida, resultados medibles. Tu equipo interno sigue entregando producto. El equipo de refactorización se enfoca en la deuda. Al final del engagement, tu equipo hereda un codebase que es objetivamente mejor — más rápido de desplegar, más fácil de entender, más seguro de modificar.

Porque la deuda técnica no desaparece sola. Y cada sprint que pasa sin abordarla, los intereses se acumulan.


¿Tu deuda técnica está frenando al equipo? Habla con un CTO — planificamos engagements de refactorización acotados con ingenieros senior que dejan tu codebase mejor de lo que lo encontraron.

¿Listo para construir tu equipo de ingeniería?

Habla con un partner técnico y despliega ingenieros validados por CTOs en 72 horas.