Most outages are self-inflicted, and most of those happen within minutes of a deploy. The release is the riskiest thing you do regularly, so that is where prevention effort pays best.
Why releases break things
A deploy changes code, config and schema, often all at once. Each is a different failure mode: new bugs, wrong env values, migrations that lock tables. The dangerous part is that the failure often does not look like a failure at first. The service starts, health checks pass, and the first real traffic finds the regression.
The strategies that actually work
- Health checks that check reality. A /healthz endpoint that always returns 200 detects nothing. Probe a real user path after every deploy. If it cannot complete, the release is not done.
- Deploy small, deploy often. The blast radius of a release scales with the number of changes inside it. Ten small deploys are easier to roll back than one big one, and each failure has a shorter suspect list.
- Canaries before full rollouts. Run the new version next to the old on a slice of traffic. Watch errors and latency on the canary, not just whether it starts.
- Schema changes decoupled from code changes. Expand-migrate-contract: add columns first, migrate data in the background, switch the code, drop the old shape last. Deploying a destructive migration and new code together is how you get a database locked during a release.
- A rollback that is actually fast. If rolling back means rebuilding from git, it is not a rollback plan, it is a wish. Keep the previous image tagged and the deploy command ready.
- Post-deploy watch windows. Most release-caused incidents show up inside 15 minutes. Hold attention on your monitors for that window after every deploy instead of declaring victory when the pipeline goes green.
The monitoring side of it
During a release, tighten feedback loops temporarily: shorter check intervals on the deploy target, alerts routed to whoever pressed the button, and a status page update ready if something does slip through. Detection speed decides whether a bad release is a blip or an incident.
The short version
Releases do not cause outages; unobserved changes do. Shrink the change, verify real behavior, keep a fast way back, and watch closely while it settles. That is most of release safety, and none of it needs a six-figure platform team.