With continuous deployment plus feature flags, a release becomes a flag flip and a changelog entry. The release event dissolves into the daily work — which is exactly the point.
Most release pain comes from conflating two operations that don't have to happen together:
In a traditional release model these happen at the same moment, which is why "release day" is terrifying: you are simultaneously taking the deployment risk and the user-facing-change risk, against work that has been merging branches for weeks. Decouple them, and each becomes individually small.
Code lands on main behind a feature flag, off by default. It deploys to production with the next CI run — usually within minutes. The user sees nothing. You can verify the code in the real production environment, with real data, before any user is affected. "Works in production" is no longer a leap of faith — it is a precondition for the release decision.
Flip the flag for yourself and the team only (by user ID, by email domain, by an "internal" segment). Use the feature for real work. This is QA done in the only environment that matters — production — without exposing users to anything you haven't yet seen yourself.
Flip the flag for 1% of users, then 10%, then 50%, then 100%. Watch error rates, latency, conversion, and any business metric that matters. Hold or roll back if anything regresses. The release is now a knob, not a button — and a knob you can turn either direction at any time.
Once the feature is at 100% and stable for a week or two, delete the flag and the dead branch of code it gated. The feature is not "done" until the flag is gone. Otherwise the codebase silently accumulates dormant flags, each one a future "wait, what does this do?" moment.
| Question | Traditional release | SSD-style |
|---|---|---|
| How often? | Weekly to quarterly | Continuously; daily ships |
| Who decides? | Release manager + CAB | Whoever owns the feature |
| Risk profile? | Big bang; many changes at once | Small per-change; gradual rollout |
| Rollback? | Re-deploy previous build | Flip the flag back |
| Coordination? | Release notes, change board, freeze | Changelog entry, async |
| Failure mode? | Late discovery of issues | Early issues at low blast radius |
Continuous-release thinking doesn't apply universally. It breaks for:
SSD makes the daily ship the default state of the system.
Read SSD