Off one server, onto Kubernetes, without a rewrite
Nine Java services and an Angular front end served live users from a single hand-deployed EC2 instance. Java and Maven were installed on the box by configuration management, each service was cloned and built there, and processes ran under nohup behind NGINX. One node, one failure domain, manual releases, no rollback, no environment isolation.
We changed the substrate and left the applications alone. Multi-stage containers that discard the build toolchain. A declarative cluster definition across three availability zones with control-plane logging and encrypted cluster secrets. Stateful resources, eight databases, fifteen registries, four buckets, CDN, search domain and shared filesystem, in CloudFormation, parameterized so production and non-production are the same template. Each service as a Helm chart with autoscaling, rolling updates and three health probes. Every secret moved to parameter store.
The replacement was proven before the predecessor was abandoned, with three days of overlap between the new stack's first commit and the old stack's last. It ran four and a half more years, growing to 25 Helm charts and 203 CI workflows without another substrate change. Single-node manual deployment became zero-downtime rolling updates with per-service autoscaling and centralized structured logging. No application source was rewritten to get there.

