Estrategias de migración¶
El Strategist presenta al menos dos estrategias con trade-offs explícitos y recomienda una. La decisión final es humana. Este documento describe el catálogo de las cuatro estrategias soportadas.
Resumen¶
| Estrategia | Cuándo aplica | Costo | Riesgo | Tiempo |
|---|---|---|---|---|
| Strangler Fig | Sistema en producción, no puede parar | Medio | Bajo | Largo |
| Big Bang | Sistema pequeño, ventana controlada, apetito transformacional | Bajo | Alto | Corto |
| Parallel Run | Lógica crítica (financiera, fiscal, regulatoria) | Alto | Medio | Medio |
| Branch by Abstraction | Refactor interno antes de la migración, apetito conservador | Bajo | Bajo | Medio |
Strangler Fig¶
El sistema nuevo crece alrededor del legado, reemplazando módulos uno por uno. El legado va siendo "estrangulado" gradualmente, de ahí el nombre.
Cuándo tiene sentido:
- Sistema en producción que no puede tener downtime largo.
- Equipo pequeño o tiempo limitado.
- Bordes claros entre módulos (de lo contrario, se enreda).
Riesgos típicos:
- Período largo con dos sistemas conviviendo.
- El router (proxy) al frente se vuelve cuello de botella si está mal diseñado.
- Tentación de mantener ambos sistemas indefinidamente.
Big Bang¶
Reemplazar todo de una vez en una ventana controlada. Apaga lo viejo, enciende lo nuevo.
Cuándo tiene sentido:
- Sistema pequeño, alcance bien delimitado.
- Ventana de mantenimiento viable (fin de semana, feriado).
- Apetito transformacional confirmado en
paradigm_decision.md.
Riesgos típicos:
- Si algo sale mal, el rollback es caro.
- La carga real solo aparece en producción.
- Bugs de integración solo surgen después del go-live.
El Strategist señala explícitamente alto riesgo cuando hay un cambio grande de paradigma combinado con Big Bang, y en esos casos suele recomendar Parallel Run para validación previa.
Parallel Run¶
Los dos sistemas corren en paralelo leyendo las mismas entradas. Las salidas se comparan. El nuevo solo asume oficialmente cuando la divergencia cae por debajo de un umbral acordado durante un período acordado.
Cuándo tiene sentido:
- Lógica crítica donde "incorrecto" tiene alto costo: financiero, fiscal, nómina, facturación.
- Cálculos complejos con muchos casos especiales.
- Cuando la paridad comportamental debe probarse, no suponerse.
Riesgos típicos:
- Costo de infra duplicado durante el período.
- Necesidad de instrumentación para comparar salidas.
- La decisión de "aceptar la divergencia" debe ser explícita.
El Inspector define los criterios de paridad aceptable (ej: divergencia < 0.01% durante 30 días).
Branch by Abstraction¶
Antes de migrar realmente, refactorizas el legado para introducir una capa de abstracción en el punto donde ocurrirá la sustitución. Después intercambias la implementación detrás de esa capa.
Cuándo tiene sentido:
- Apetito conservador.
- Sistema con baja cohesión arquitectural, donde extraer un módulo aislado es difícil.
- El equipo quiere ganar confianza antes del salto.
Riesgos típicos:
- Trabajo extra de refactor que puede sentirse "perdido" si la migración no ocurre.
- Agregar abstracción en el lugar equivocado empeora la mantenibilidad.
Cómo elige el Strategist¶
El Strategist combina tres señales:
- Brief: plazo, presupuesto, restricciones, criticidad.
- Apetito derivado de
paradigm_decision.md: conservative / balanced / transformational. - Tamaño y estado del legado: número de reglas, complejidad de los flujos, integraciones.
Apetito conservador favorece Branch by Abstraction y Strangler Fig. Apetito transformacional permite Big Bang en sistemas pequeños. Cambio grande de paradigma con apetito transformacional hace que el Strategist recomiende Parallel Run para validación.