One self-hosted console to run your entire business — commerce, ERP, HRM, CRM & manufacturing

Los riesgos ocultos del software empresarial heredado: guía de un arquitecto para modernizar sin tirarlo todo de golpe

Diez factores de riesgo que vuelven peligrosos los sistemas empresariales antiguos, los dolores de cabeza diarios que causan, un mapa de calor sencillo de probabilidad e impacto y el patrón strangler fig para reemplazar un sistema heredado una función a la vez.

Author

Anichur Rahaman

hace 2 meses10 min read3 views
Los riesgos ocultos del software empresarial heredado: guía de un arquitecto para modernizar sin tirarlo todo de golpe

El software heredado casi nunca se cae de golpe; se va desgastando poco a poco. Un reporte tarda un poco más cada mes. Agregar un nuevo método de pago "va a llevar unas semanas". El único desarrollador que entiende el módulo de inventario se va de vacaciones y todo el equipo se queda esperando a que regrese.

Los dueños de negocio suelen notar estos síntomas mucho antes de que alguien les ponga nombre. Cuando reviso un sistema antiguo como arquitecto, mi trabajo es convertir esa incomodidad difusa en una lista concreta de riesgos, calificar cada uno y proponer una salida que no detenga la operación. Este artículo comparte ese método.

Encontrarás diez factores de riesgo que vale la pena revisar, los dolores de cabeza que cada uno provoca en el día a día, un mapa de calor sencillo para calificarlos y un enfoque de modernización —el patrón strangler fig— que reemplaza el sistema viejo pieza por pieza en lugar de apostarlo todo a reescribirlo desde cero.

Qué significa realmente "sistema heredado"

Ser heredado no tiene que ver con la edad. Un sistema de cinco años puede ser moderno si tiene pruebas, documentación y corre sobre software con soporte. Uno de dos años puede ser heredado si nadie se atreve a tocarlo. Una definición práctica:

Un sistema heredado es cualquier sistema del que depende el negocio, pero que no se puede modificar de forma segura, rápida o a un costo razonable.

Con esta definición, la pregunta no es "¿cuántos años tiene?", sino "¿qué tan riesgoso es cambiarlo y qué tan riesgoso es dejarlo como está?". Las dos opciones tienen un precio.

Los diez factores de riesgo

Mapa de calor de diez riesgos de sistemas heredados según probabilidad e impacto
Un mapa de calor típico del back office de un comercio con diez años de antigüedad. El próximo incidente saldrá de la celda superior derecha.

1. Lenguaje o framework sin soporte

Cuando la versión del lenguaje o del framework llega al fin de su soporte, dejan de salir parches de seguridad. Cada mes que pasa se agranda la brecha entre las vulnerabilidades conocidas y tus defensas. Además, actualizar se vuelve cada vez más difícil, porque las librerías avanzan y dejan de ser compatibles con tu versión.

El dolor de cabeza diario: "No podemos integrar esa pasarela de pago; su librería pide una versión más nueva de PHP".

2. Todo depende de una sola persona

Solo un desarrollador o un proveedor externo sabe cómo funciona el sistema. No hay nada documentado, y cuando esa persona se va, el conocimiento se va con ella. Suele ser el riesgo de mayor impacto, y el último en el que reparan los dueños.

El dolor de cabeza diario: versiones, correcciones y hasta un simple ajuste de datos esperan a que esa persona tenga tiempo.

3. No hay pruebas automatizadas

Sin pruebas, cada cambio es una apuesta, así que el equipo cambia lo menos posible. Los problemas se parchan por fuera en lugar de resolverse de raíz, y modificar el código se vuelve más difícil cada año.

El dolor de cabeza diario: "Corregimos el redondeo de las facturas y ahora el reporte de descuentos sale mal".

4. Una sola base de datos compartida y sin límites

Cientos de tablas que todas las partes de la aplicación leen y escriben, a veces también scripts externos. Cambiar una columna puede romper una pantalla de la que nadie se acuerda.

El dolor de cabeza diario: modificar un campo sencillo se convierte en una semana entera rastreando efectos secundarios.

5. Deuda de seguridad acumulada

Contraseñas guardadas con métodos obsoletos, llaves de API escritas dentro del código, paneles de administración sin doble factor, páginas de error que exponen datos de la base de datos y ningún límite de intentos al iniciar sesión. Por separado, cada punto parece menor; juntos, son una puerta abierta.

El dolor de cabeza diario: cuando un cliente grande manda su cuestionario de seguridad, nadie quiere contestarlo.

6. Datos aislados y varias versiones de la verdad

Los datos del cliente están en la tienda, en el CRM y en una hoja de cálculo; las existencias, en el sistema y en la libreta del encargado del almacén. Cuando las cifras no coinciden, la gente deja de creer en todas.

El dolor de cabeza diario: las juntas se van en discutir cuál reporte es el correcto.

7. Integraciones frágiles

Archivos CSV que viajan cada noche por FTP, scripts que extraen datos del sitio de un proveedor, integraciones que se detienen sin avisar cuando caduca una contraseña. Funcionan hasta que dejan de hacerlo, y nadie se da cuenta durante días.

El dolor de cabeza diario: "Los estatus de la paquetería no se actualizan desde el martes".

8. Un techo de rendimiento

Consultas que traen un registro por cada vuelta de un ciclo, cero caché y reportes que recorren tablas completas. Con mil pedidos todo va bien; con un millón, es un suplicio.

El dolor de cabeza diario: los reportes de fin de mes tardan toda la noche y la tienda se pone lenta mientras corren.

9. Huecos de cumplimiento y auditoría

No queda registro de quién cambió un precio, un sueldo o una existencia. No hay forma de exportar o eliminar los datos personales de un cliente cuando lo solicita. El consentimiento no se guarda. En muchos países, las leyes de protección de datos convierten todo esto en obligaciones legales, no en funciones opcionales.

El dolor de cabeza diario: responder una sola pregunta del auditor toma una semana.

10. Dependencia del proveedor y condiciones de licencia

Un sistema cerrado en el que el proveedor controla la exportación de tus datos, sube los precios al renovar o descontinúa el producto. A veces el propio contrato es el mayor riesgo.

El dolor de cabeza diario: "Queremos cambiarnos de sistema, pero no logramos sacar nuestros datos en un formato que sirva".

Califica los riesgos en una tarde

No necesitas un consultor para empezar. Reúne a quienes usan el sistema y a quienes le dan mantenimiento, y califiquen cada riesgo del 1 al 5 en dos ejes:

  • Probabilidad: ¿qué tan probable es que provoque un incidente real en los próximos 12 meses?
  • Impacto: si ocurre, ¿qué tan grave sería: ventas perdidas, datos perdidos, problemas legales o daño a la reputación?

Multiplica ambas cifras. Lo que sume 15 o más se atiende este trimestre; lo que quede entre 8 y 14 entra en la hoja de ruta; lo que esté por debajo de 8 basta con vigilarlo. El mapa de calor de arriba no es más que esta tabla dibujada, y es la diapositiva más efectiva que conozco para que un consejo directivo apruebe presupuesto de modernización.

RiesgoProbabilidad (1–5)Impacto (1–5)PuntajeAcción
Lenguaje o framework sin soporte5525Este trimestre
Dependencia de una sola persona4520Este trimestre
Deuda de seguridad4520Este trimestre
Sin pruebas automatizadas4416Este trimestre
Integraciones frágiles339Hoja de ruta
Dependencia del proveedor248Hoja de ruta

Estos puntajes son solo un ejemplo, no una referencia. En tu propia sesión saldrán otros, y la conversación vale tanto como el resultado.

Por qué fracasan las reescrituras desde cero

Una vez que los riesgos están a la vista, la respuesta más tentadora es: "Hagámoslo de nuevo, pero bien hecho". Sin embargo, las reescrituras completas fracasan muchas más veces de las que salen bien, y por razones que se pueden anticipar:

  • El sistema viejo sigue cambiando mientras se construye el nuevo, así que el objetivo nunca deja de moverse.
  • Las reglas ocultas se pierden. Diez años de casos especiales viven en el código viejo: un redondeo para cierto impuesto, un descuento especial para un mayorista. Nadie los dejó por escrito.
  • Durante un año o más no llega nada a los usuarios, así que la retroalimentación llega tarde y el presupuesto se acaba antes.
  • El día del cambio es un precipicio. Si algo sale mal, todo sale mal.

El patrón strangler fig: moderniza una pieza a la vez

El higo estrangulador es una planta que crece alrededor de un árbol hasta que puede sostenerse sola. En software ocurre lo mismo: el sistema nuevo crece alrededor del viejo y va asumiendo sus funciones una por una, hasta que el núcleo antiguo se puede apagar.

Migración con el patrón strangler fig en tres pasos: colocar una fachada de enrutamiento, mover una pieza y retirar el núcleo antiguo
Una fachada de enrutamiento permite que el sistema viejo y el nuevo convivan. El tráfico se va moviendo pieza por pieza.

Paso 1 — Coloca una fachada al frente (meses 0–2)

Pon una capa de enrutamiento delante del sistema viejo, como un API gateway o un proxy ligero. Al principio envía el 100 % del tráfico al sistema antiguo. Al mismo tiempo:

  • Escribe pruebas de caracterización que registren lo que hace hoy el sistema viejo en los procesos clave, esté bien o mal.
  • Agrega un outbox de eventos a la base de datos antigua, para que cada cambio importante (un pedido nuevo, un movimiento de inventario) llegue de forma confiable a los módulos nuevos.
  • Documenta cada regla oculta que descubras. Ese documento terminará siendo el más valioso de la empresa.

Paso 2 — Mueve una pieza (meses 2–8)

Elige una pieza importante y con límites claros: catálogo e inventario, o pedidos. Construye el módulo nuevo o adopta uno ya probado, y dirige esa función hacia él.

  • Una capa anticorrupción traduce entre el modelo de datos viejo y el nuevo, para que las rarezas del sistema antiguo no se cuelen en el código nuevo.
  • Una ejecución en paralelo manda la misma entrada a ambos sistemas y compara los resultados hasta que coincidan por completo.
  • Los feature flags mueven una sucursal, una tienda o un grupo de clientes a la vez, con la posibilidad de regresar al instante.

Paso 3 — Retira el núcleo antiguo (del mes 8 en adelante)

Cuando se haya movido la última pieza, archiva el histórico en un almacenamiento de solo lectura, apaga las pantallas viejas que queden y elimina el código antiguo. Conserva los datos y deshazte del riesgo.

¿Refactorizar, cambiar de plataforma, reemplazar o retirar?

No todas las partes de un sistema heredado merecen el mismo trato. Tres preguntas definen el camino de cada una:

Árbol de decisión: retirar lo que ya no se necesita, reemplazar lo genérico, refactorizar lo que tiene soporte y puede probarse, y si no, cambiar de plataforma
Funciones genéricas como pedidos, inventario, libro mayor o nómina rara vez justifican construirse desde cero.
  • Retira lo que ya nadie usa. Es la modernización más barata que existe.
  • Reemplaza las funciones genéricas —pedidos, inventario, contabilidad, nómina, recursos humanos— con módulos probados. Tu ventaja competitiva casi nunca está en la forma de contabilizar un asiento.
  • Refactoriza lo que es propio de tu negocio y sigue sano: agrega pruebas y actualiza en pasos pequeños.
  • Cambia de plataforma lo que es propio de tu negocio pero quedó atrapado en una tecnología sin soporte: lleva sus reglas a la nueva tecnología detrás de la fachada.

Lecciones de migraciones reales

Hay lecciones que no vienen en los libros, sino de la experiencia:

  • Prueba con la misma base de datos que usas en producción. Una base de datos de pruebas rápida en memoria puede esconder diferencias en búsquedas que distinguen mayúsculas, en comparaciones de tipos estrictas y en restricciones. Algunas de las peores sorpresas que he visto pasaron todas las pruebas y se cayeron con la primera petición real.
  • Cada acción debe responder con un mensaje claro. Un "500 Server Error" a secas durante una migración destruye la confianza del usuario más rápido que cualquier función faltante. Valida los datos antes de ejecutar cualquier servicio y convierte los errores en mensajes que indiquen qué hacer.
  • Carga los datos de referencia una sola vez y deja constancia. Los scripts de configuración que se ejecutan en cada actualización tarde o temprano borran un ajuste que alguien cambió a mano.
  • Mide el rendimiento antes y después. Sin la cifra de "antes" no podrás demostrar que el sistema nuevo es más rápido, y siempre habrá alguien que diga que es más lento.
  • Lleva una bitácora de auditoría desde el primer día. Saber quién cambió qué y cuándo resuelve en minutos la mitad de las discusiones de una migración.

Dónde encaja StoreConsole en un plan de modernización

StoreConsole está formado por módulos independientes —catálogo, inventario, pedidos, envíos, contabilidad, recursos humanos, nómina, CRM y más— que se comunican entre sí únicamente mediante eventos. Por eso es una opción natural para el camino de "reemplazar": colocas un módulo detrás de la fachada, lo alimentas desde el outbox del sistema viejo y pasas al siguiente cuando el primero ya está estable. Cada módulo incluye bitácora de actividad, permisos por rol y doble factor de autenticación, lo que reduce varios de los riesgos anteriores desde el primer día. El breve recorrido de abajo muestra los roles, el doble factor y la bitácora de auditoría.

Recorrido de usuarios y roles (0:47): permisos por rol, doble factor de autenticación y bitácora de auditoría completa.

Tus primeros 30 días

  1. Semana 1: organiza la sesión de riesgos y dibuja tu propio mapa de calor.
  2. Semana 2: resuelve primero lo de puntaje alto y bajo costo: activa el doble factor, cambia las llaves expuestas y prueba restaurar un respaldo.
  3. Semana 3: escribe pruebas de caracterización para tus tres procesos más importantes.
  4. Semana 4: elige la primera pieza que vas a mover y acuerden cómo medirán el éxito.

En resumen

  • Heredado significa "no podemos cambiarlo de forma segura", no "es viejo".
  • Califica los diez factores de riesgo según probabilidad e impacto, y atiende este trimestre todo lo que sume 15 o más.
  • Evita reescribir todo desde cero. Usa una fachada, un outbox de eventos y el patrón strangler fig.
  • Reemplaza las funciones genéricas con módulos probados y reserva el código a la medida para lo que realmente te distingue.
  • Prueba con la base de datos de producción y no dejes que ninguna pantalla responda solo con un error.

Anichur Rahaman es arquitecto de software y fundador de StoreConsole. Diseña sistemas de comercio y ERP para empresas en crecimiento, con especial atención a la arquitectura orientada a eventos, la exactitud de los datos y los sistemas que corren en los servidores de la propia empresa.

About the Author

Anichur Rahaman

Continue Reading