How do I reduce risk associated with releasing new features?
Key takeaways
- Release risk drops sharply once you stop treating deployment and release as the same event: deploy code dark, then decide who sees it and when.
- Gradual rollouts and canary releases contain a problem to a small audience before it has a chance to spread to everyone.
- Dark launches give you production signal, but without feature flags they increase risk. Flags add reversibility and precise targeting so a misbehaving path does not ripple to every user.
- A kill switch configured with a safe “off” default stops damage in seconds, covering both features and internal or external dependencies the team does not control.
- Governance exists to reduce risk. FeatureOps lets regulated organizations like Lloyds Banking Group keep that governance (audit logs, approvals, role-based access) without giving up release speed.
You reduce release risk by dropping one habit: shipping code and exposing it to users in the same motion. When you decouple deployment from release, then layer gradual rollouts, canary releases, dark launches, kill switches, and governance controls on top, you catch problems while only a small audience sees them. You can also reverse course in seconds instead of waiting on a redeploy. This is the operating model that regulated banks, fintechs, and high-uptime platforms use to move fast without gambling on every user at once.
Why most release risk comes from doing two things at once
Most teams treat “deploy” and “release” as synonyms. They are not. When you push code to production and expose it to every user in the same step, a single bad build becomes an incident for your entire customer base instead of a contained test.
The fix starts with a mental model shift. You decouple deploying code from releasing it to users, so code can sit live in production, dormant and unseen, until you decide who gets it and when. That decision point is where risk management happens. As one framing puts it, deployment is a technical task while release is a business decision, and conflating the two removes the control point you need most.
The cost of skipping this decoupling is measurable. Downtime can cost thousands of dollars per minute, with one customer example citing $123,016 per minute and IBM’s own benchmark averaging $6,696 per minute. Outages at Google Cloud and Cloudflare have shown how a single bad configuration or code path can cascade across dependent services within minutes. Teams that can recover from a failed deployment by flipping a flag instead of redeploying have documented recovery times up to 2,293 times faster than teams stuck waiting on a build pipeline.
Decouple deployment from release with feature flags
Feature flags are the mechanism that makes deploy and release genuinely decoupled events. With flag-driven development, you wrap new or risky code in conditional statements, so the code ships to production but stays inactive until a flag turns it on for a defined audience.
This pattern, often called feature flag driven development, changes how engineering teams plan work. Instead of coordinating a release around a single deployment window, you deploy continuously and release on your own schedule, independent of the build pipeline. That also makes it easier to adopt trunk-based development or similar practices, which reduces the complexity of managing long-lived branches. Rollback, targeting, and rollout percentage all become configuration changes instead of code changes.
NAV, the Norwegian labor and welfare administration, used this approach to go from a handful of releases a year to deploying every other minute, without increasing the size or risk of any single change. That cadence shift did not happen by deploying faster and hoping for the best. It happened by decoupling deployment frequency from release exposure, so each flag flip carries a fraction of the risk a full release used to carry.
Use progressive rollouts and canary releases to limit blast radius
Once deployment and release are decoupled, the next control is how wide you open the door. A gradual rollout to a small percentage of users first lets you watch error rates, latency, and support tickets before expanding exposure, rather than finding out about a regression from every user at once.
Canary releases apply the same logic to infrastructure instead of user segments. With a canary pattern, you release to a small subset of users or servers first, monitor for anomalies, and only then promote the change to the rest of the fleet. This mirrors the miners’ canary: a small, expendable signal catches the problem before it reaches everyone else.
Targeting and segmentation make both patterns precise instead of blunt. You can roll out to internal employees first, then a single geography, then a percentage tier, then everyone, adjusting the pace based on what you observe at each stage. For SaaS companies, the same targeting is how you release with full control in a multi-tenant environment: one tenant, one cohort, or one customer contract at a time, instead of a fleet-wide flip. The goal at every stage is the same: contain the blast radius of a bad change to a group small enough that a mistake is an inconvenience rather than an incident.
Test safely in production with dark launches
Staging environments cannot replicate production traffic patterns, data volume, or third-party integration behavior at scale. Dark launches close that gap by letting code run against real production conditions without any user seeing the result.
You can adopt dark launches as a technique without feature flags. That is also where the real risk shows up. If the dark-launched component misbehaves, the failure can still ripple to every user sharing that infrastructure. Dark launch alone gives you information you may need, but it increases risk. Feature flags are what make the pattern safer:
- Reversibility: you can reverse the launch in seconds by flipping a flag, and the badness disappears. That is the same control the next section covers with kill switches.
- Precise targeting: nothing stops you from dark-launching under control and dialing the scope with targeting, instead of running the new path against the whole fleet.
A dark launch differs from a gradual rollout in what the user experiences. A rollout exposes a working feature to a growing audience. A dark launch runs a new code path in the background, often against shadow or mirrored traffic, while users interact with the existing experience unchanged. This lets you test new code against production conditions before anyone depends on it, which carries a meaningfully different risk profile than exposing a feature and watching for failure.
Shadow traffic is the zero-exposure version of this pattern. Production requests are duplicated and sent to the new code path, and the response is discarded rather than served to the user. You get a real production signal for performance, error rates, and data correctness with no customer-facing risk, since nothing the new code produces reaches a real user. Pair that with a flag so you can still shut the path off if the shadow work itself starts to hurt the system.
Keep a kill switch ready as the last line of defense
Gradual rollouts, canaries, and dark launches reduce the odds of an incident. A kill switch is what limits the damage when one happens anyway.
A kill switch is distinct from a rollback and from a general-purpose feature flag. A rollback reverts to a previous deployment, which still requires a build and deployment cycle, however fast. A kill switch is a flag purpose-built to disable a single capability instantly, independent of the rest of the system, so you can disable a misbehaving feature without a full deployment. The critical design detail is the default state. You wrap the risky code in an inverted flag so off is the safe default, meaning a flag failure or configuration gap fails toward safety instead of toward exposure.
This is also what distinguishes a kill switch from a routine rollback path. Teams that build both report that they roll back instantly instead of waiting on a full redeploy, but they still keep a dedicated kill switch for the features most likely to fail under load, and more often for internal or external dependencies that sit outside the application team’s control. A kill switch is monitored and triggered independently of the deployment pipeline. As one operator put it, the value of a kill switch is that you shut off a flaky feature without touching the rest of the system, so one failing dependency does not force a broader incident response.
Tink, a Visa solution, applied this pattern across a monolithic architecture spanning more than 25 services and 20 environments. Engineers there needed to toggle features off instantly if something went wrong, without redeploying the monolith or coordinating a fix across every dependent service. The kill switch pattern gave them that control without touching deployment cadence at all.
Keep governance without sacrificing speed
Governance is how regulated organizations reduce and manage risk: change management, approvals, and audits. Teams that take it seriously do not trade it away for speed. They are often perceived as slow because the lever they have is process, not runtime control.
Feature management with proper governance, the FeatureOps model, is what gives them both. They keep the governance they already need, and they stop sacrificing speed, because the control point moves to flags, targeting, and reviewable exposure changes rather than to slower deployments.
None of these controls matter if they cannot pass an audit. Regulated organizations need audit logs, change-request approvals, and role-based access alongside every rollout, canary, dark launch, and kill switch, or the speed they gain never survives a review.
Lloyds Banking Group operationalized this pairing at scale. Supporting more than 1,000 users across 20 platforms and 23 million customers, the bank needed release mechanisms that satisfied strict regulatory review without slowing engineering down. By pairing feature management with structured approval workflows, Lloyds was able to maintain regulatory controls while accelerating release cycles, reporting a 35% acceleration in release velocity without loosening oversight.
The lesson generalizes past banking. Change-request approvals turn a rollout decision into a reviewable event, role-based access limits who can flip a flag serving millions of customers, and audit logs give compliance and security teams a record of every exposure change, not just every deployment. Speed and governance stop being competing goals when the underlying system produces the audit trail a review needs by default, rather than as an afterthought.
FAQs
What’s the difference between deploying code and releasing a feature?
It helps to split the work into three parts, not two.
- Deployment is building an artifact and putting it on the infrastructure.
- Exposure is controlling whether a given feature that is already in that artifact is available, and to whom.
- Release is the business decision and process that combines deployment and exposure: which features should be available, and to which users.
Handling these as one event means a bad build reaches everyone at once. When you decouple deploying code from releasing it to users, a deployment can sit inactive in production until you choose the audience and timing. Release becomes a controlled decision rather than a side effect of shipping code.
How do feature flags reduce release risk in practice?
Feature flags let you wrap risky code in a condition that stays off until you turn it on for a defined group. This supports a gradual rollout to a small percentage of users first, so you can watch error rates and performance before expanding exposure. It also gives you a fast path back to safety if something goes wrong, since flipping a flag off is far faster than reverting a deployment.
What is a kill switch, and how is it different from a rollback?
A kill switch is a flag purpose-built to instantly disable one capability, independent of the rest of the system, so you can disable a misbehaving feature without a full deployment. Use it for features that fail under load, and just as often for internal or external dependencies the application team does not control. A rollback reverts to a prior deployment, which still requires a build and deployment cycle even when automated. Teams that also build rollback paths report they can roll back instantly instead of waiting on a full redeploy, but a kill switch remains the faster, more targeted option for a single failing feature or dependency.
How does a canary release differ from a gradual rollout?
A canary release exposes a change to a small subset of infrastructure or users first, monitors for problems, and only then promotes it further, so you release to a small subset of users or servers first. A gradual rollout applies the same logic directly to user percentage, moving from a small slice toward full exposure in stages. Both patterns aim to contain a problem before it reaches your full audience, but canary releases are more often framed around infrastructure health, while gradual rollouts are framed around user impact.
What is a dark launch, and how is it different from a kill switch?
A dark launch runs new code against production traffic without exposing the result to any user, which lets you test new code against production conditions before anyone depends on it. You can do that without feature flags, but then a misbehaving path can still ripple to everyone. Flags add reversibility and targeting so you can shut it off or narrow the scope in seconds. A kill switch, by contrast, is a response tool: it exists to shut a feature or dependency off quickly once it is already live and something has gone wrong.
How do regulated companies keep governance while releasing faster?
Governance is there to reduce risk, not to be traded for speed. Regulated organizations pair release controls with audit logs, change-request approvals, and role-based access, so every rollout, canary, and kill switch produces a reviewable record. Lloyds Banking Group used this approach to maintain regulatory controls while accelerating release cycles across more than 1,000 users and 20 platforms, showing that FeatureOps lets them keep governance and still move faster, because the lever is runtime control rather than slower process.
Take your next step
If your team is weighing how to decouple deployment from release without losing the audit trail a regulated environment demands, we are glad to walk through how Unleash supports rollouts, kill switches, and approval workflows in practice. Start a free trial to see how the controls in this guide look in your own environment.
