The problem
The platform was running production on a handful of manually managed servers. Deploying meant SSHing in and hoping nothing broke; staging and production had quietly drifted apart over time; and incidents were usually discovered from a support ticket rather than caught by any alert.
What we did
- Containers and Kubernetes. Packaged every service into containers and stood up a production cluster, with staging built from the same configuration as production — no more drift between the two.
- Infrastructure as code. Rewrote the environment in Terraform — networking, the cluster, databases, secrets — so any environment can be rebuilt from source control instead of institutional memory.
- SRE practices. Defined SLOs and error budgets per service, built Prometheus and Grafana dashboards against them, and set up an on-call rotation with written incident-response runbooks and blameless postmortems.
The outcome
Deploys that used to take a careful afternoon now ship in minutes through CI/CD. The team catches most issues from alerting before a customer notices, and on-call load has dropped now that the common failure modes are understood, documented, and covered by a runbook instead of tribal knowledge.