Legacy Modernization
Modernize gradually. Without big-bang rewrite.
70% of big-bang rewrite projects fail. We modernize using the strangler fig pattern — every step brings value and is rollbackable.
Why not big-bang rewrite¶
The statistics are clear: 70% of large rewrite projects exceed budget by 2×+ or fail completely. Reasons:
- Scope creep — “Since we’re doing it again, let’s also add X, Y, Z”
- Knowledge loss — Nobody knows why legacy does what it does. Edge cases appear only in production.
- Dual maintenance — 12-24 months maintaining two systems in parallel
- Big bang risk — D-Day: you switch and hope
The Strangler Fig pattern eliminates all these risks.
7-step modernization playbook¶
Step 1: Stabilization and measurement (2-4 weeks)
Before you start changing, you need to know where you are. We deploy monitoring, collect baseline metrics, identify bottlenecks. Output: legacy system health report with concrete numbers.
Step 2: Domain mapping (1-2 weeks)
Event Storming workshops with domain experts. We map bounded contexts, dependencies, data flows. We identify candidates for first migration — modules with fewest dependencies and highest value.
Step 3: API Gateway (2-3 weeks)
Facade in front of legacy. All requests go through gateway, routing rules decide who serves. New system behind gateway, legacy behind gateway. Switching at endpoint level.
Step 4: First module isolation (4-8 weeks)
We extract the first bounded context into a standalone service. Own database, own deployment, own monitoring. Anti-corruption layer protects the new service from legacy data model.
Step 5: Data migration (2-4 weeks per module)
CDC (Debezium) for real-time replication. Dual-write with reconciliation jobs. Consistency metrics — migration is complete when reconciliation shows 100% match for 7 days in a row.
Step 6: Traffic shifting (1-2 weeks per module)
Canary release: 5% → 25% → 50% → 100%. Automatic metrics decide on continuation. Rollback in seconds. Human intervention only for anomalies.
Step 7: Decommission (1-2 weeks per module)
Old module off. New module monitoring for 30 days after full rollout. Data archiving. Documentation. Celebration.
Data migration — the hardest part¶
Legacy systems have years of technical debt in data: - Inconsistent formats (date as string in 5 different formats) - Missing validation (NULL where it shouldn’t be, duplicates) - Implicit business logic in data (status codes nobody documented)
Our approach: 1. Analysis — Source data profiling, anomaly identification 2. Transformation rules — Mapping + cleaning + validation 3. CDC pipeline — Debezium for real-time sync 4. Reconciliation — Automatic source vs. target comparison 5. Rollback plan — For every step
Measuring success¶
Modernization without metrics is just rewriting. We measure:
- Deployment frequency — From monthly to daily
- Lead time — From weeks to hours
- MTTR — From hours to minutes
- Change failure rate — Under 5%
- TCO — Total cost of operation and development
- Developer satisfaction — Yes, we also measure team satisfaction
Časté otázky
6-18 months depending on system size. But we deliver value from the first quarter — better monitoring, faster deployments, reduced operational costs.
Every step is rollbackable. The old system runs in parallel until the new one proves its quality. We never disconnect legacy until the new system passes all quality gates.
No. Strangler fig enables parallel development — new features go into the new system, the old system is frozen for maintenance. The team doesn't block business.