Skip to main content

Software, apps, websites, networks and AI automation

Technology Insights

Feature Flags in 2026: Why Deploying Code Is No Longer the Same as Releasing It, What a Missing Kill Switch Really Costs, and How to Keep Flag Debt From Rotting Your Codebase

Feature Flags in 2026: Why Deploying Code Is No Longer the Same as Releasing It, What a Missing Kill Switch Really Costs, and How to Keep Flag Debt From Rotting Your Codebase

  • Internet Pros Team
  • September 15, 2026
  • Software Development

Most outages do not start with an attacker or a failed disk. They start with a change. Someone ships new code or a new configuration, it behaves differently in production than it did in testing, and it reaches every user at the same moment. Feature flags are the discipline that breaks that chain. By wrapping new behaviour in a switch that can be turned on for one percent of users, or off for everyone within seconds, teams separate deploying code from releasing it. In 2026 that is no longer a big-tech habit; it is a baseline for any business whose customers depend on its software.

Deploy Is Not Release

A deployment puts new code on servers. A release exposes new behaviour to people. For decades those were the same event, so every deploy was a bet: if something broke, the only fix was another deploy, usually a slow rollback that dragged unrelated changes with it. A feature flag is a conditional in the code backed by a value that lives outside the code. The new checkout flow, pricing rule or search ranking ships dark, switched off, and is turned on later from a dashboard or configuration service without rebuilding or redeploying anything.

The if statement is trivial. The value is in what surrounds it: targeting rules that decide who sees what, a fast and reliable way to change the value in every running instance, an audit trail of who flipped which switch, and monitoring that shows whether the change is doing harm.

What a Missing Switch Costs

The classic cautionary tale is Knight Capital. In August 2012 the trading firm rolled new code out to seven of its eight order servers. The eighth still carried long-retired logic, and a flag that had been repurposed for the new feature switched that old logic back on. In about 45 minutes the firm lost more than 400 million dollars and never recovered as an independent company. The lessons still hold: never recycle a flag for a new meaning, and delete dead code once a flag is retired.

Recent incidents point the same way. In July 2024 a faulty CrowdStrike content update crashed roughly 8.5 million Windows machines because it went to every customer at once; the company afterwards committed to staged, canary-style rollouts for those updates. In June 2025 a Google Cloud outage was traced to a new code path in a core control system with no feature flag protecting it, so bad data crashed it everywhere at once.

A kill switch is not a pessimistic feature. It is the cheapest insurance in software: a few lines of code that turn a global outage into a graph that spikes for ninety seconds.

The Four Kinds of Flags

A widely used split, popularised by Pete Hodgson, groups flags by purpose and by how long they should live.

Flag type What it is for Expected lifespan
Release flag Hide unfinished or risky work until it is ready Days to weeks, then delete it
Experiment flag Show variants to measure which performs better The length of the experiment
Ops flag or kill switch Turn off an expensive or failing feature under load Long lived, owned by operations
Permission flag Enable features per plan, customer or region Permanent; effectively product configuration

The distinction matters because the rules differ. A release flag still sitting in the code six months later is debt. A kill switch removed because nobody used it last quarter is a future outage.

Progressive Delivery: Rolling Out in Rings

Once release is decoupled from deploy, the natural next step is to release gradually. Progressive delivery exposes a change to a widening circle of users and, at each step, compares the exposed group with everyone else before moving on.

A Typical Rollout Ladder
  • Internal users. Staff see the change first, on real production data.
  • One percent of traffic. Enough to surface crashes and error spikes without meaningful customer impact.
  • Ten, then fifty percent. Watch conversion and latency, not only errors.
  • Everyone. Leave the flag in place for a short bake period, then remove it.
  • Automatic brakes. Tie the rollout to alerting so a rise in errors or latency drops the percentage back to zero without waiting for a human.

Percentage rollouts must be sticky. The same user should land in the same bucket on every request, usually by hashing a stable user or account ID. Otherwise a customer flips between old and new interfaces and the metrics become meaningless.

Flag Debt Is Real Debt

Every flag doubles the number of paths through the code it touches. Ten independent flags in one area produce more than a thousand combinations, and nobody tests all of them. Stale flags also hide dead code and, as Knight Capital showed, can resurrect behaviour everyone assumed was gone.

  • Give every flag an owner and an expiry date when it is created, and open a ticket or fail the build when that date passes.
  • Name flags for what they do, and never reuse a name.
  • Report flags that have sat at 100 percent or 0 percent for more than a few weeks; they are ready to delete.
  • Keep the count of live release flags on a team dashboard, the same way you track open bugs.

Build, Buy, or Standardise

A configuration file and an if statement can be enough for a small application. It stops being enough once you need per-user targeting, instant changes across many servers, audit logs and experiment analysis. Commercial platforms such as LaunchDarkly and open-source options such as Unleash, Flagsmith and GrowthBook cover that ground. The more important shift is OpenFeature, a vendor-neutral standard hosted by the Cloud Native Computing Foundation. Application code calls one OpenFeature API and a provider plugs in whichever backend you choose, so changing vendors does not mean rewriting every flag check.

Two design details keep a flag system from becoming a new single point of failure. Evaluate flags locally from a cached rule set rather than calling a remote service on every request, so a provider outage does not take your product down. And give every flag a safe default, so that if configuration cannot be loaded the code falls back to known-good behaviour.

Security and Privacy Considerations

Flags are a control plane for your product, so treat them like one. Limit who can change production flags, require approval for switches on payment and login paths, and keep an audit log. Flags evaluated in a browser or mobile app are visible to anyone who inspects the traffic, so never use a client-side flag to hide something that must stay secret or to enforce access control; check permissions on the server. Send hashed identifiers, not personal data, to a third-party flag service.

The Bottom Line

Many of the most expensive outages of recent years were not caused by clever attackers but by ordinary changes that reached everyone at once. Feature flags and progressive delivery let teams ship often without betting the business on each deploy: release to a few, watch, widen, and keep a switch within reach. The part that makes it work is not the flag but the cleanup, because a switch nobody remembers is simply a bug waiting for the right conditions.

Share:
Tags: Software Development Business

Related Articles