Problem
Releasing to everyone at once turns every bug into a full outage, and deploy and release are the same irreversible event. Teams either ship slowly out of fear or ship fast and absorb incidents.
Also known as: gradual-rollout, staged-rollout
Release changes to progressively larger audiences while measuring impact, with automatic halting or rollback when metrics degrade.
Releasing to everyone at once turns every bug into a full outage, and deploy and release are the same irreversible event. Teams either ship slowly out of fear or ship fast and absorb incidents.
Progressive delivery extends continuous delivery with controlled exposure. A deployment puts new code on servers; a release exposes it to users. Splitting the two lets teams ship constantly and expose cautiously.
A rollout is a sequence of steps, each with a traffic share and a health gate.
steps:
- weight: 5 pause: 10m gate: error_rate < 1%
- weight: 25 pause: 15m gate: p99 < 400ms
- weight: 50 pause: 15m
- weight: 100
on gate failure: abort -> weight 0
The controller shifts traffic using a load balancer, service mesh or flag service. It queries a metrics backend during each pause and compares canary against stable. Failure triggers rollback without paging a human.
Medium - extra capacity and routing layer
Medium - tuning analysis rules and flags
Medium - concurrent version compatibility
Metrics too noisy so bad releases pass
Incompatible versions corrupt shared state while both run
Flag and rollout leftovers pile up as technical debt