Descomposición asistida por IA y ejecución paralela
Dos etapas encadenadas: primero entendemos, luego coexistimos con el legacy hasta ganar la confianza operativa.
1. Análisis y descomposición con IA
Analizamos código, logs y documentación. Un motor con LLMs y análisis estático identifica bounded contexts y propone fronteras de servicios desacoplables. El resultado es documentación viva en 4 niveles (0-3) navegable por negocio y por técnica.
2. Coexistencia y validación en paralelo (Shadow Mode)
Un router inteligente duplica las peticiones al nuevo microservicio en modo sombra. Un diff engine compara resultados con el monolito y sincroniza datos por CDC. El nuevo servicio solo asume tráfico real cuando la equivalencia funcional está probada.
Objetivos estratégicos
Agilidad y Time-to-Market
Ciclos de desarrollo más cortos y despliegues autónomos por servicio.
Escalabilidad selectiva
Escalar servicios críticos sin sobredimensionar toda la infraestructura.
Mantenibilidad y calidad
Bases de código más pequeñas, comprensibles y testeables de forma aislada.
Resiliencia y tolerancia a fallos
El fallo de un servicio no compromete la disponibilidad global del sistema.
Innovación tecnológica
Adopción de nuevos stacks y lenguajes en servicios específicos de forma progresiva.
Reducción del riesgo operativo
Despliegues pequeños, controlados y reversibles frente al big-bang.
Del spaghetti al núcleo funcional dirigido por dominio
No basta con reescribir. Aprovechamos la migración para pasar de un monolito procedural entrelazado a un núcleo funcional puro modelado por dominios (DDD) y anclado con TDD. Cada regla de negocio queda expresada como función pura verificable.
Dominios como frontera
Bounded contexts derivados del análisis IA: siniestros, folios, liquidación… cada uno con su lenguaje ubicuo y su modelo propio.
Núcleo funcional puro
Reglas de negocio como funciones puras, sin efectos secundarios. Los side-effects (BD, IO, colas) viven en los bordes, no dentro de la lógica.
TDD sobre la spec formal
Los contratos, invariantes y ejemplos extraídos del legacy se convierten en tests. La suite falla antes de escribir el código nuevo y valida cada refactor.
Property-based testing
Además de casos de ejemplo, generamos miles de inputs sintéticos para cazar regresiones que el shadow mode confirmará contra el legacy real.
El agente propone. Las personas y el CI/CD deciden.
Ninguna línea generada por IA llega a producción sin pasar por el mismo control que el código humano: pull request, revisión de otro developer, suite de tests, validación shadow y despliegue progresivo. El agente es un colaborador más del repo, no un canal paralelo.
1. El agente abre PR
Vía MCP-GitHub, el agente crea una rama por bloque migrado, sube código nuevo, tests generados desde la spec y la documentación de los niveles actualizada.
2. CI ejecuta la suite
GitHub Actions dispara linters, type-check, tests unitarios y property-based, contract tests contra la spec y un run de shadow-diff contra el legacy con tráfico sintético.
3. Revisión humana
Otro developer revisa el PR con contexto: diff de código, cambios en la spec, tabla de equivalencia funcional y enlace al bloque original del legacy. Comenta, pide cambios o aprueba.
4. Merge → shadow real
Al mergear, el nuevo servicio se despliega en shadow: recibe tráfico duplicado en producción sin devolver respuesta. El diff engine compara resultados 24/7 hasta alcanzar el umbral de equivalencia.
5. Cutover progresivo
Cuando la equivalencia supera el SLO (p.ej. 99.9%), un feature flag desvía tráfico real por canary, con rollback automático si aparecen divergencias.
Agentes especializados sobre stack open-source
La solución no es una caja negra: es una orquestación de agentes con responsabilidades claras, apoyados en herramientas open-source estándar. Cada capa es reemplazable.
Recorre el repo legacy y descubre funcionalidades, dependencias y datos tocados.
Genera la documentación multinivel (0-3) bloque a bloque, decidiendo profundidad.
Extrae entidades, sinónimos y homónimos; construye y mantiene el grafo de conocimiento del dominio.
Convierte los bloques en spec formal ejecutable: tipos, contratos, invariantes.
Genera código en el lenguaje destino guiado por la spec y por el estilo del proyecto.
Deriva tests unitarios, property-based y de contrato desde la spec y los ejemplos del legacy.
Abre PRs, responde comentarios de revisores humanos y ajusta código o spec.
Compara respuestas legacy vs. nuevo servicio en tiempo real y reporta divergencias.