EPAM Systems
Zero-downtime migration of a 30-component monolith to AKS
The problem
A 30-component Java/C++ monolith was the single point of failure for a platform used by 100K+ people daily. Every deploy carried real downtime risk, and scaling meant scaling the whole system at once.
- Reliability post-migration
- 99.99%
- Deployment speed
- 94% faster
- Provisioning speed
- 70% faster
The approach
Decomposed the monolith into independently deployable services on AKS, backed by a GitLab CI/CD and ArgoCD GitOps pipeline, with infrastructure defined in Terraform end to end.
Constraints and tradeoffs
A big-bang cutover — migrate everything in one release window
For a 100K+ daily-user platform, one cutover turns any single migration defect into a full outage instead of a contained one. The zero-downtime requirement ruled this out by itself.
Lift-and-shift to VMs instead of Kubernetes
Would have avoided the AKS learning curve, but kept the same deployment model that made independent scaling and independent deploys impossible in the first place — it treats the symptom, not the monolith.
Rewrite in a different language before migrating
Combining a language rewrite with an infrastructure migration doubles the risk surface at once. The Java/C++ code stayed as-is; only the deployment unit changed.
I'd invest earlier in the synthetic-traffic validation harness that checked each decomposed service before its cutover — it existed, but arrived a few services later than it should have.