InfoFounding Members35 lifetime licenses available: view the offerInfoMCP launch announcementConnect Claude, Cursor or any MCP client with your API token to let an agent create monitors, manage incidents and configure alerts. Read the docs
guides

Preventing production outages during releases

2 min read

Back to blog

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.

FAQ

Why do releases cause most production outages?

A deploy changes code, config and schema at once, and regressions often pass health checks because the service starts fine. The first real traffic is what finds the problem.

What is the fastest way to reduce deploy-related outages?

Probe a real user path right after every deploy and watch monitors closely for 15 minutes, since most release incidents surface in that window. Small frequent releases and instant rollback do the rest.

What is expand-migrate-contract?

Deploying schema changes in three steps: add the new shape first, migrate data in the background, then remove the old shape after the code no longer needs it. It prevents deploys from locking or breaking the database.

How do canary releases prevent outages?

The new version serves a small slice of traffic while the old keeps running, so regressions hit a few requests instead of all users and get caught before full rollout.

Should I tighten monitoring during a release?

Yes. Shorter check intervals on the deploy target and alerts routed to the deployer shrink time to detect, which decides whether a bad release is a blip or an incident.

Keep reading