Automated releases for a product team
A Montréal product team was shipping by hand: every release tied up a senior dev for two or three hours, and every release brought surprises. We rebuilt the pipeline end-to-end, from commit to production.
Every release followed a twelve-step Google Doc. A senior developer blocked two to three hours, watched the database migration by hand, tailed logs, and crossed their fingers. Deploys went out on Tuesdays because nobody wanted to risk a Friday.
Code and infrastructure drifted slowly. Three IaC tools coexisted (legacy Terraform, shell scripts, the AWS console). Nobody knew which config was the source of truth. Staging and production diverged silently until the next incident exposed it.
The breaking point: a one-line bug fix for a customer took two days to ship because no fast path existed. The customer had churned before it landed.
We deployed on Tuesdays because nobody wanted to deal with a broken Friday night.
— Lead developer
- 01Full GitHub Actions pipelineLint, unit tests, build, Playwright e2e, deploy. Four parallel jobs, fail fast. The same pipeline runs on every pull request before merge — nothing lands on main without clearing the gates.
- 02Per-PR preview environmentsEvery pull request gets its own environment (unique URL, fresh database, seeded data). Code review happens on real product, not screenshots. Auto-destroyed when the PR closes.
- 03Unified IaC with PulumiMigrated the three previous tools into a single Pulumi + AWS CDK codebase. One source of truth for networking, secrets, databases, certificates. Diffs visible in every PR before they apply.
- 04Datadog dashboards and alertsPer-service dashboards, alerts wired directly to deployments (auto-annotated on the timeline). When a metric drifts after a release, the team knows which commit to blame in fifteen seconds.
- 05One-click rollbackA manual GitHub workflow that redeploys the previous version. Tested weekly via a chaos drill. Measured rollback time: under two minutes from click to green healthcheck.
Releases went from two or three hours a week to about eight minutes — with nobody watching the screen. Cadence went from weekly to several deploys per day. Fridays went back to being regular days.
The senior dev who used to babysit deployments got a full day per week back. The team ships urgent customer fixes in under an hour. Zero configuration-drift incidents since the migration.
We shipped an urgent fix in twelve minutes last week. Six months ago that was a two-day job.
— Lead developer
- Preview environments are the unlock — code review turns into product review.
- One IaC tool, not three. Pick one and live with the tradeoffs; cheaper than juggling.
- Wiring alerts to deployments turns a passive dashboard into an active alarm system.