Reescribir es una decisión de riesgo
El código antiguo no es automáticamente descartable. Contiene comportamiento no documentado, supuestos de integración y hábitos de recuperación. Antes de reemplazar, mapea entradas runtime, bases, jobs, autenticación, contratos y flujos críticos.
Crea un perímetro de seguridad
Pruebas de caracterización e integración capturan comportamiento observable sin fingir un diseño limpio. Añade logs y métricas donde el fallo es invisible. Reproduce el camino parecido a producción antes de cambiar dependencias.
Moderniza por frontera
Actualiza un paquete, aísla una regla, reemplaza un adaptador o mueve un endpoint por vez. Las capas de compatibilidad sirven cuando su propósito y retiro son explícitos. Cambios pequeños preservan rollback y revisión.
Separa estados de entrega
Compilar, pasar pruebas, integrar, completar CI, desplegar y homologar son eventos distintos. Una arquitectura moderna en papel no prueba tráfico real. Evidencia operativa y decisiones del cliente siguen siendo gates.