burneh
Infrastructure

Deploys so boring nobody has to watch them.

A deploy should be the least exciting part of your week. We make builds reproducible, gate every release behind tests and a canary that watches real metrics, and wire rollback to fire on its own the moment the numbers turn, so a bad deploy is a non-event at 10% of traffic instead of an incident at 100%.

Drive it: run a healthy release and watch it promote, then flip to a bad build and watch the canary gate catch it and roll back on its own, at 10% of traffic.

deploy · pipeline console
release
pipeline · release v128
canary metrics · 10% traffic
error rate
0.2%
budget 1.0%
p95 latency
182ms
budget 300ms
production
v127→v128
release in progress…

A release that has to earn the last step.

What you just operated is this. Every release is built the same way, tested, and put in front of a small slice of real traffic. Only if it holds its error and latency budget does it go to everyone. The rollback isn't a runbook you follow at 2am, it's a rule the pipeline enforces itself.

commitsignedbuildreproducibletestunit + integcanary 10%real trafficSLO gateerror · latencypromote 100%v128 liverollbackauto · v127 stayshealthyover budget0102030405
01
Build

One reproducible, cached artifact from the commit. The same input always gives the same image.

02
Test

Unit and integration suites gate the release. A red build never leaves the pipeline.

03
Canary

The new version takes a small slice of real traffic while the old one serves the rest.

04
Gate

Error rate and latency are watched against a budget for a bake period, automatically.

05
Promote or roll back

Under budget, it goes to 100%. Over it, the canary is pulled with no human needed.

The whole release, in one file.

The pipeline you just watched is this config, in version control alongside the code. The gate is the important part: it names the budget the release has to hold, and what happens if it doesn't. No one decides whether to roll back under pressure, because the file already did.

deploy.yml
1# deploy.yml — canary with an automatic rollback gate
2steps:
3 - build: { reproducible: true, cache: true }
4 - test: { suites: [unit, integration], required: true }
5 - canary: { traffic: 10%, bake: m }
6 - gate: # release continues only if:
7 error_rate: "< 1%"
8 p95_latency: "< 300ms"
9 on_breach: rollback # otherwise pull it automatically
10 - promote: { traffic: 100% }
how it rolls out
Canary

A slice of real traffic tests the release before everyone does. Most bad deploys die here.

Automatic rollback

The SLO gate pulls a failing release without a human in the loop, in seconds not minutes.

Blue-green, when a canary can't

For changes a slice can't cover, flip all at once with an instant switch back to the old version.

Reversible migrations

Expand then contract, so the schema is compatible with both versions and a code rollback is safe.

What makes a deploy safe to ignore.

Safe deploys aren't about being careful on the day. They're about the guarantees being automatic, so that the day is uneventful whether you're watching or not.

The same commit, the same artifact

Reproducible, pinned builds, so what you tested is exactly what ships, byte for byte.

Gated on real metrics

A release earns 100% by holding an error and latency budget on live traffic, not by looking fine in staging.

Rollback without a human

The gate pulls a bad release itself, so recovery isn't waiting for someone to wake up and run a command.

Reversible by design

Migrations expand-then-contract and artifacts are versioned, so rolling back never strands the database or the data.

Every deploy on the record

Who shipped what, when, and whether it was rolled back, all logged, so an incident review has the facts.

Boring on purpose

Small, frequent, automated releases, because the risky deploy is the big one you've been putting off.

The dangerous deploy is the big one you've been afraid to do.

When shipping is scary, teams ship less, and the changes pile into a huge risky release that's even scarier, so they ship even less. The way out isn't more courage, it's making each deploy so small and so automatic that it's boring: reproducible builds, a canary that catches the bad ones at 10%, and a rollback that doesn't need you. We build the pipeline that makes a deploy a non-event, because a non-event is exactly what a deploy should be.

Deploys that are boring, on purpose.

Reproducible builds, a canary gated on real error and latency budgets, automatic rollback, and reversible migrations, so a bad release is a non-event at 10% instead of an incident at 100%.