SaaS · 2026
Cloud migration, CI/CD and test automation for a SaaS
An engagement for a SaaS product whose releases had become risky: deployments by hand over SSH, no staging, and bugs found by customers. The product moves to containers in the cloud, gets a pipeline from pull request to production, and gains the tests that make releasing routine.
Built by
- Client
- Withheld at the client’s request
- Scope
- Cloud · CI/CD · Monitoring · Tests
- Environments
- Dev · Staging · Production
- Typical timeline
- 8–12 weeks
- Squad
- 4 people · 3 disciplines
Technologies
- Docker
- Kubernetes
- Terraform
- GitHub Actions
- AWS
- Prometheus
- Grafana
- Sentry
- Playwright
- k6
The product
10 images01
Brief
Every release was a late night.
Context
The product had grown to many paying companies on a single server, set up by hand years ago.
Problem
Releases happened at night over SSH, there was no staging, a rollback meant restoring a backup, and outages were reported by customers.
Goals
- Infrastructure written as code
- A staging copy of production
- Tested, one-click releases
- Problems seen before customers see them
02
Team
The squad behind it.
| Tech leadMigration plan and release process | ×1 | Migration plan and release process | Senior | |
|---|---|---|---|---|
| DevOps engineerInfrastructure as code, pipelines and monitoring | ×1 | Infrastructure as code, pipelines and monitoring | Senior | |
| Backend engineerApp changes for containers and health checks | ×1 | App changes for containers and health checks | Senior | |
| QA engineerEnd-to-end and load tests in the pipeline | ×1 | End-to-end and load tests in the pipeline | Senior |
03
Backend & architecture
Small changes so the app fits the cloud.
Who worked on it
The application is adjusted to run in containers: configuration from the environment, files in object storage, sessions in Redis, and health endpoints the platform can check.
Decision 1
Stateless app servers
Any instance can be replaced or added at any time.
Trade-off · Uploads and sessions move to shared services.
Decision 2
Database migrations run before traffic shifts
Old and new versions must both work during a deploy.
Trade-off · Breaking schema changes are split across two releases.
04
DevOps
From pull request to production, the same way every time.
Who worked on it
All infrastructure is defined in Terraform and reviewed like code. Every pull request is built and tested, merging deploys to staging, and production is a one-click promotion with an automatic rollback if health checks fail.
- Infrastructure as codeEvery change reviewed and repeatable.
- Automatic rollbackFailed health checks undo the release.
- Alerts that matterErrors and latency, routed to on-call.
05
QA
Tests that run on every change.
Who worked on it
We start with the flows customers use most — sign-in, billing, the main dashboard — and cover them with end-to-end tests in the pipeline. A load test runs on staging before each major release.
- Critical paths firstWhere a bug costs the most.
- Load testsBefore every major release.
- Flaky tests fixedA red build always means something.
Tell us what you’re building.
A short message is enough. A senior engineer replies within 1 working day.
