Tecnología9 de septiembre de 2026

Modernizar un sistema legacy sin detener la operación

Qué hace legacy a un sistema — no su edad —, las cuatro estrategias reales para modernizarlo, y por qué la reescritura completa es la que fracasa más seguido.

Por id3a Team
Modernizar un sistema legacy sin detener la operación

Casi todas las conversaciones sobre modernización empiezan mal, porque empiezan por la tecnología: "está en PHP 5", "usa jQuery", "corre en un servidor propio". Nada de eso es, por sí solo, un problema.

Un sistema es legacy cuando cambiarlo cuesta más de lo que debería y nadie puede predecir el costo. Esa es la definición útil, porque es la que se conecta con el dinero.

Las señales que sí importan

No la edad del código, sino estas:

Nadie puede estimar un cambio

Si la respuesta a "¿cuánto toma agregar este campo?" es "depende, hay que ver qué más toca", el sistema perdió su modularidad. Los cambios se propagan por rutas que nadie tiene mapeadas.

No hay red de seguridad

Sin tests, cada despliegue es una apuesta, y como cada despliegue es una apuesta, se despliega poco. Como se despliega poco, cada entrega acumula muchos cambios, lo que hace más probable que algo se rompa y más difícil saber qué lo rompió. Es un círculo que se cierra sobre sí mismo.

El conocimiento vive en una sola cabeza

Cuando hay una sola persona que entiende cómo funciona el módulo de facturación, el riesgo dejó de ser técnico y pasó a ser organizacional.

La operación depende de pasos manuales

Alguien corre un script a fin de mes. Alguien ajusta un registro a mano cuando el proceso falla. Esos parches son señales de que el sistema no modela bien el negocio actual.

El stack bloquea decisiones

Aquí sí entra la tecnología, pero como consecuencia: una versión del lenguaje sin soporte de seguridad, una dependencia abandonada, una base de datos que ya no recibe parches. El problema no es que sea viejo — es que ya no se puede actualizar sin tocar todo lo demás.

Un sistema estable y aburrido no es legacy

Si un sistema funciona, se puede modificar con confianza y su stack todavía recibe soporte, no hay nada que modernizar. Reescribir algo que no molesta es la forma más caduca de gastar presupuesto.

Las cuatro estrategias, con sus costos reales

No son alternativas ideológicas: son respuestas distintas a situaciones distintas, y se combinan.

EstrategiaQué implicaCuándo convieneSu costo
Rehosting / replatformingMover el sistema a infraestructura moderna sin tocar la lógicaEl problema es operacional: caídas, respaldos, escalado, costos de servidorNo mejora nada del código; el techo de mantenibilidad sigue igual
RefactoringReestructurar el código por dentro, sin cambiar el comportamientoEl sistema hace lo correcto, pero cuesta modificarloNo produce funcionalidad visible, así que necesita respaldo explícito del negocio
Reemplazo gradualSacar el sistema por partes, módulo a módulo, con el viejo y el nuevo conviviendoEl sistema es grande y la operación no puede pararHay que mantener dos sistemas en paralelo un buen tiempo
Reescritura completaConstruir el reemplazo y cambiar de uno a otroEl sistema es pequeño, o su dominio cambió tanto que la lógica actual ya no sirveEl riesgo más alto de todos, y crece con el tamaño

Por qué la reescritura completa falla tan seguido

No por incompetencia técnica. Por dos razones estructurales:

No se puede congelar el negocio. Mientras se construye el reemplazo, el sistema viejo sigue recibiendo cambios: una ley nueva, un cliente grande que pide algo, un error que hay que corregir. El proyecto de reescritura persigue un blanco en movimiento, y cada cambio en el viejo hay que implementarlo dos veces.

El sistema viejo contiene reglas que nadie documentó. Años de casos especiales — el cliente que factura distinto, el descuento que aplica solo en una sucursal, el redondeo que contabilidad exige — viven en el código y en ningún otro lugar. Aparecen cuando el sistema nuevo ya está en producción y alguien nota que los números no cuadran.

Por eso el reemplazo gradual es, en la mayoría de los casos, la apuesta más razonable: cada módulo que se migra entrega valor de inmediato, y si algo sale mal, lo que falla es una parte y no todo.

Cómo se ve un reemplazo gradual en la práctica

El patrón se conoce como strangler fig — la higuera que crece alrededor del árbol y lo va reemplazando hasta sostenerse sola. Aplicado a software:

  1. Poner una capa delante. Un enrutamiento en la entrada (un proxy inverso, o rutas a nivel de aplicación) que decide qué peticiones atiende el sistema viejo y cuáles el nuevo. Al principio, todas van al viejo.
  2. Elegir el primer módulo por riesgo y valor, no por facilidad. El mejor candidato suele ser algo con límites claros, cambios frecuentes y poco acoplamiento — por ejemplo, la emisión de reportes o una integración con un tercero. Lo que menos conviene tocar primero es el núcleo transaccional.
  3. Definir de dónde sale la verdad. Este es el punto que decide si el proyecto funciona. Para cada dato, un solo sistema es el dueño y el otro lo consulta. Dos sistemas escribiendo la misma tabla sin una regla clara es la fuente número uno de inconsistencias.
  4. Migrar, desviar el tráfico, y recién entonces borrar. El código viejo se elimina cuando el nuevo lleva tiempo en producción, no el día del cambio.
  5. Repetir, midiendo. Cada módulo migrado debería reducir el tiempo de los cambios siguientes. Si no lo hace, el orden elegido está mal.

Antes de escribir una línea

Tres cosas que valen más que cualquier decisión de arquitectura:

  • Tests sobre el comportamiento actual. Aunque sean pocos y de alto nivel. Sin ellos no hay forma de saber si el reemplazo hace lo mismo, y "hace lo mismo" es el requisito que nadie escribe pero todos asumen.
  • Un inventario de integraciones. Todo lo que consume el sistema: reportes, otro software, un archivo que alguien descarga, una consulta directa a la base de datos que hace el contador. Lo que no está en el inventario es lo que se rompe.
  • Un criterio de éxito medible. Tiempo para poner un cambio en producción, incidentes por mes, horas de trabajo manual. Sin línea base, la modernización se evalúa por sensaciones — y el proyecto siempre "se siente" largo.

Nuestro enfoque

En id3a no partimos de "hay que reescribirlo". Partimos de entender qué duele y cuánto cuesta:

  • Revisión de la arquitectura y las dependencias actuales, incluyendo qué ya no tiene soporte de seguridad.
  • Identificación de los puntos que concentran el riesgo y de los que concentran los cambios — no siempre son los mismos.
  • Un plan por etapas donde cada una entrega algo aprovechable por sí sola.
  • Migración con los dos sistemas conviviendo, para que la operación no se detenga.
  • Tests y documentación como parte del trabajo, no como una fase posterior que nunca llega.

A veces la conclusión es que no hay que modernizar todavía, y que conviene invertir en tests y en actualizar dependencias. Eso también es una respuesta.

Conversemos sobre tu sistema

¿Te gustó este artículo?

Descubre cómo podemos ayudarte a implementar estas soluciones en tu negocio.