Páxina pillar

Modernización de sistemas legacy

Refactorización incremental do monolito a microservizos, migración desde tecnoloxías obsoletas a stacks modernos, traslado á nube — sen interrupción de negocio, con plan de rollback e rexistro de auditoría completo.

Cada empresa ten algún sistema legacy. Algunhas teñen varios. Unha aplicación contable de 2008 que dalgún xeito funciona. Un CRM escrito por consultores dos que xa ninguén se acorda. Un almacén en Access. Algún día haberá que substituílos — a pregunta non é se, senón candocomo.

A modernización de sistemas legacy é un dos tipos de proxecto de TI máis difíciles. Require equilibrar tres forzas: manter a continuidade de negocio (o sistema debe funcionar todo o tempo), introducir tecnoloxías modernas (microservizos, nube, IA) e controlar o risco (cada refactorización pode romper algo que funcionou durante anos).

Por que non abonda con „reescribir desde cero"?

Segundo a nosa experiencia, 9 de cada 10 modernizacións exitosas son refactorizacións incrementais, non rewrite. Os rewrites tentan pola súa simplicidade conceptual („empezaremos cunha folla en branco"), pero na práctica teñen tres problemas fundamentais:

  • Lóxica de negocio invisible. O sistema antigo contén anos de regras de negocio — condicións especiais para os clientes maiores, exencións fiscais para sectores concretos, workarounds para regulacións de 2015. A maioría non está documentada. O rewrite ten que reconstruílas todas a partir da memoria das persoas ou da análise do código.
  • Duplicación do traballo. Mentres se escribe o novo sistema, o negocio segue esixindo cambios no antigo (regulacións, novos clientes, pequenos erros). O equipo ou duplica o traballo (cambio en dous lugares), ou conxela o sistema antigo (risco de negocio).
  • Despregamento big bang. Tras un ano de traballo, o novo sistema está „case listo". O cambio de todos os usuarios nunha soa noite xera un risco monumental. Calquera problema inesperado significa volta ao sistema antigo, perda de moral do equipo, perda de confianza do negocio.

A refactorización incremental (na maioría dos casos segundo o patrón Strangler Fig) resolve as tres: a lóxica de negocio descúbrese pouco a pouco, hai unha única fonte de verdade para cada entidade, o despregamento faise por etapas con feature flags.

Seis patróns de modernización

Cada un resolve un risco concreto. Na maioría dos proxectos combinamos varios, escollendo o patrón para cada módulo concreto.

Strangler Fig

„Envolver" gradualmente o sistema antigo con novos compoñentes. O código antigo segue funcionando, pero cada nova funcionalidade vai a un novo microservizo, e os módulos existentes son substituídos un tras outro. Tras 12-24 meses o vello monolito apágase.

Anti-corruption layer

Adaptador que protexe o código novo das particularidades do sistema antigo (nomes de campo ilexibles, formatos de datas estraños, tipos inconsistentes). Toda a lóxica „fea" illada nun único lugar — o código novo opera sobre un modelo de dominio limpo.

Database refactoring

Patróns do libro Refactoring Databases (Ambler/Sadalage): expand-and-contract para a migración de esquema, validación de datos antes de eliminar columnas antigas, manter ambos os esquemas en paralelo durante a migración da aplicación.

Branch by abstraction

Introdución dunha capa de abstracción arredor do compoñente antigo, implementación paralela do novo compoñente, conmutación gradual do 0% ao 100% do tráfico (feature flag). Sen despregamentos „big bang".

Shadow mode

O código novo execútase en paralelo co antigo — ambos procesan as mesmas peticións, pero só os resultados do antigo chegan ao usuario. Os resultados compáranse offline. Tras confirmar a coincidencia (tipicamente 2-4 semanas), trasladamos o tráfico ao novo código.

Event sourcing para migración

Gravamos o stream de eventos de negocio do sistema antigo e reproducímolo no novo. Permite validar previamente a nova arquitectura sen risco produtivo, e volver a calquera estado histórico.

Cronograma típico dunha modernización

Para un sistema medio (monolito de ~200 mil liñas de código, 5-10 módulos de negocio):

  1. Mes 1: Discovery e documentación. Reverse engineering da arquitectura, mapeamento de dependencias, identificación de fluxos de datos, documentación dos procesos de negocio coa axuda do persoal de negocio.
  2. Mes 2: Arquitectura obxectivo e piloto. Deseño da nova arquitectura, escolla das tecnoloxías, piloto no módulo máis sinxelo (proof of concept). Primeira validación do enfoque.
  3. Meses 3-4: Extracción do primeiro módulo en produción. Patrón Strangler Fig, shadow mode durante 2-3 semanas, conmutación do tráfico, hypercare. Primeiro valor de negocio real.
  4. Meses 5-12: Extracción iterativa dos seguintes módulos. Cada un nun ciclo de 4-6 semanas: refactorización → probas → shadow → produción → hypercare. Mellora continua do proceso, redución do tempo dos seguintes módulos.
  5. Meses 12-18: Migración de datos e retirada do monolito. Cando todos os módulos críticos están extraídos, finalizamos a migración dos datos históricos, apagamos o sistema antigo, arquivámolo. Celebramos.

Sistema antigo vs. modernizado

AspectoSistema legacy (tipicamente)Tras a modernización
Tempo de despregamento de nova función4-8 semanas (alto risco de regresión)3-7 días (probas automáticas minimizan o risco)
Cobertura de probas5-15% (ou nada)>80%, no pipeline CI/CD
Dispoñibilidade de desenvolvedoresPequena (tecnoloxía obsoleta)Grande (stacks modernos e populares)
SeguridadeBibliotecas antigas con vulnerabilidades CVEEscaneo OWASP, gitleaks, actualizacións automáticas
EscaladoVertical (máis recursos para o monolito)Horizontal (escalado de microservizos concretos)
ObservabilidadeLogs en ficheiros, sen métricasPrometheus + Grafana + Sentry + SIEM
Compliance (RXPD, EU AI Act, ISO 27001)Esixente, custosa de probarIntegrada na arquitectura, lista para auditoría

Seis riscos típicos — e como os abordamos

Risco: Ausencia de probas no sistema legacy

Mitigación: Primeiro construímos probas de caracterización (capture tests) — gravamos o comportamento actual do sistema a partir dos logs de produción e gravacións de tráfico. Só despois comezamos a refactorización, cos test como rede de seguridade.

Risco: Coñecemento concentrado nunha persoa („truck factor 1")

Mitigación: A transferencia de coñecemento empeza na primeira semana do proxecto. Todas as reunións coa persoa que coñece o sistema son gravadas e transcritas, os procesos clave documentados, as decisións arquitectónicas xustificadas. Tras o proxecto todo o equipo entende o sistema.

Risco: Desaceleración temporal do equipo

Mitigación: Nos primeiros 2-3 meses o equipo mantén o sistema antigo + constrúe o novo. Desaceleración natural do ritmo de cambios. Mitigámola: prioridade para os cambios que só van ao sistema novo, freeze para os cambios de baixa prioridade no código antigo.

Risco: Migración de datos

Mitigación: Cada migración de datos ten tres fases: dry-run (sobre unha copia de produción), staging (no ambiente de proba con escala real de datos), produción (en xanela de servizo ou de forma incremental). Plan de rollback listo antes do inicio.

Risco: Resistencia organizativa

Mitigación: Comunicación co negocio desde o primeiro día: por que a modernización, que cambia para o usuario, que cronograma, como medimos o éxito. A primeira iteración escóllese de modo que amose rapidamente un valor tanxible (p. ex. nova UI ou informe máis rápido).

Risco: Subestimación do custo

Mitigación: Discovery (1-2 semanas) antes da valoración do proxecto. Iteracións de 2-3 semanas con entregables concretos — máis fácil corrixir o rumbo que nun proxecto longo do tipo „todo de golpe". Orzamento cun búfer do 20-30% para imprevistos.

Preguntas máis frecuentes

Que é un sistema legacy?
Un sistema legacy é un software que segue funcionando na organización, pero está baseado en tecnoloxías obsoletas, ten unha gran débeda técnica, fáltanlle probas, documentación ou o desenvolvedor que o escribiu. Exemplos clásicos: aplicación monolítica en PHP 5.x ou .NET Framework 4.0, base de datos sen migracións, frontend en jQuery, despregamento por FTP. Funciona, pero cada cambio supón un alto risco e custo.
Por que pagar pola modernización se o sistema funciona?
Tres razóns principais. Primeira: o custo de mantemento crece exponencialmente coa idade do sistema — cada vez menos desenvolvedores coñecen a tecnoloxía, cada cambio leva máis tempo, cada bug ten maior impacto. Segunda: risco de seguridade — frameworks antigos teñen vulnerabilidades sen parchear, falta de soporte do fabricante, incumprimento de RXPD/ISO 27001. Terceira: bloqueo do crecemento do negocio — os novos requirimentos (mobile, API, integracións, IA) son difíciles ou imposibles de engadir.
Non é máis sinxelo escribir todo de novo?
Clásico dilema „rewrite vs refactor". Os rewrites tentan pola simplicidade conceptual, pero na práctica: duran 2-3 veces máis do planificado, o proxecto afúndese baixo o peso de reconstruír a lóxica de negocio invisible, mentres tanto hai que seguir desenvolvendo o sistema antigo (duplicación de traballo). Segundo a nosa experiencia: 9 de cada 10 modernizacións exitosas son refactorizacións incrementais (patrón Strangler Fig) — substitución gradual de elementos do sistema antigo, mantendo a continuidade de negocio. O rewrite ten sentido só para sistemas moi pequenos.
Require a modernización unha interrupción de negocio?
Na inmensa maioría dos proxectos, non. Aplicamos patróns que permiten substituír compoñentes „en quente": blue-green deployment, feature flags, dark launches, execución paralela do código antigo e novo con comparación de resultados (shadow mode). Pode ser necesario unha curta xanela de servizo na migración da base de datos con cambio significativo de esquema, pero planificámola con antelación (tipicamente pola noite, en fin de semana) e con plan de rollback completo.
Canto dura unha modernización típica?
Depende da escala. Un único módulo do monolito extraído como microservizo: 1-2 meses. Modernización maior (5-10 módulos, nova base de datos, nova API): 6-12 meses en iteracións de 2-3 semanas. Transformación completa dun monolito de clase enterprise: 18-36 meses, pero o valor de negocio aparece xa tras a primeira iteración — cada módulo extraído dá beneficios inmediatos (cambios máis rápidos, menor risco, mellor observabilidade).
Desde que tecnoloxías migramos con maior frecuencia?
Os camiños máis frecuentes: PHP 5/7 → PHP 8 ou Python (FastAPI) ou Node.js (Express/Fastify). .NET Framework 4.x → .NET 8 ou Java/Spring Boot. Java EE (JBoss/WebSphere) → Spring Boot ou Quarkus. jQuery + templates monolíticos → React/Vue/Astro. Oracle DB → PostgreSQL (importantes aforros en licenzas). On-premise → nube (AWS, Azure, GCP, nube privada local).
Que pasa coas integracións existentes con outros sistemas?
Cada integración existente mapéase na fase de discovery. O plan de migración inclúe: preservación dos contratos existentes (os clientes internos e externos non notan o cambio), introdución de versionado (v1 contrato antigo, v2 novo), migración gradual dos consumidores a v2, e só despois retirada de v1. Compatibilidade total cara atrás durante a migración.
Como limitades o risco de negocio?
Cinco capas: 1) incrementalidade — substituímos un módulo de cada vez, non todo de golpe; 2) probas de caracterización — antes da refactorización gravamos o comportamento actual do sistema (capture tests), que despois verifican que nada se rompeu; 3) feature flags — a nova funcionalidade actívase gradualmente (1% de usuarios → 10% → 50% → 100%); 4) plan de rollback para cada despregamento (<5 min); 5) hypercare tras o despregamento (monitorización intensiva 2-4 semanas).
Que pasa coa documentación do sistema, que non existe?
Problema frecuente en legacy. Primeira etapa do proxecto: reverse engineering da documentación. Os axentes IA analizan o código, o esquema da base de datos, os logs de produción e xeran: esquema da arquitectura, lista de endpoints, mapa de dependencias, descrición dos procesos de negocio. Esta documentación logo verifícase coas persoas de negocio (se o proceso é como se entende do código). Resultado: documentación completa antes de comezar a refactorización, útil non só para o proxecto de modernización, senón tamén para o equipo de produto.
Cales son os custos da modernización en comparación co mantemento do sistema antigo?
A curto prazo, a modernización é máis cara que o mantemento (investimento na refactorización + mantemento do sistema antigo en paralelo). O punto de break-even (cando o novo sistema se volve máis barato de manter que o antigo) adoita producirse tras 12-18 meses. Pasado ese tempo, o novo sistema: custa menos de manter (menos desenvolvedores, máis automatización), permite introducir cambios máis rápido (time-to-market máis curto), reduce o risco (mellor observabilidade, máis probas, illamento de fallos).

Comecemos por unha auditoría

Auditoría técnica dunha semana: mapeamento do estado actual, identificación das áreas máis urxentes de modernización, plan por etapas con efectos de negocio concretos na primeira iteración.