Feature Flags in 2026: Types, Tools and A/B Testing

Profile picture of Arvucore Team

Arvucore Team

September 22, 2025 · Updated August 26, 2026

13 min read

Feature flags (also called feature toggles) are runtime switches that separate deploying code from releasing a feature. In 2026 they are the standard mechanism for progressive delivery, kill switches, entitlements and A/B testing, and OpenFeature has made the vendor choice reversible. This guide covers the four flag types, deployment, A/B testing, tooling and hygiene.

What feature flags are and the four flag types

A feature flag is a conditional whose value comes from configuration, not from the build. The code asks "is new-checkout enabled for this user?" and rules you can change at runtime answer. The code path ships; the flag decides whether anyone reaches it.

Flags fall into four types with different lifetimes, risk profiles and owners. Confusing them is the root cause of most flag debt.

Type Purpose Typical lifetime Changes how often Owner
Release flag Ship unfinished or risky code dark, then ramp it up Days to weeks Rarely, then deleted Feature team
Experiment flag Randomize users into variants to measure an effect Length of the experiment Never during the test Product + data
Ops flag / kill switch Disable a dependency, degrade gracefully, cap load Permanent Rarely, under incident Platform / SRE
Permission flag Entitlements: plan tiers, beta cohorts, internal users Permanent Per-customer changes Product / support

A release flag still in the code six months later is a bug; a kill switch still there six years later is doing its job. Permission flags are business logic that happens to use the flag SDK and need the same tests and audit trail as any authorization rule.

Under the hood, a control plane (dashboard, rules, audit log) feeds SDKs. Server SDKs pull the full ruleset and evaluate in-process, so a check costs microseconds and survives a control-plane outage. Client SDKs receive already-evaluated values, because shipping rules to a browser would leak segments and targeting.

How feature flags change your deployment strategy

Without flags, deploy and release are the same event. With flags, deploy becomes a non-event: the binary reaches production with the new path off, and the release happens later, on a dashboard, one cohort at a time. That decoupling is what makes trunk-based development workable: unfinished code merges to main daily because it sits behind a flag.

Flags complement the infrastructure-level approaches in our post on blue-green, canary and rolling deployments. The difference is granularity:

  • A canary deployment routes a percentage of traffic to a new binary. It catches crashes and latency regressions in the whole build.
  • A flag rollout exposes a percentage of users to a new code path inside the same binary. It isolates one feature and can target by attribute: staff first, then one region, then 10% of everyone.

A practical sequence:

  1. Deploy with the flag off. Confirm the new path emits telemetry and does nothing for users.
  2. Enable for employees and QA. Fix what they find without another deploy.
  3. Ramp by percentage with sticky assignment, watching error rate, latency and the feature's business metric at each step.
  4. Reach 100%, wait one release cycle, delete the flag and the old path.

Reverting a deploy takes minutes and affects every change in the build; flipping a flag takes seconds and affects one feature. In a CI/CD pipeline, that means fewer emergency releases.

A flag is only a safe rollback if the old path still works. Database migrations are the usual trap: apply them expand-and-contract style so both paths run against the same schema. Our guide to database migrations in production covers the pattern.

Feature flags vs A/B testing: where the line is

Flags and A/B tests are layers, not competitors. An A/B test is a flag plus three things flags do not provide: randomization, measurement and statistics.

Aspect Feature flag rollout A/B test
Question answered "Is this safe to ship?" "Is this better than what we had?"
Assignment Progressive, by attribute or percentage Random, fixed for the duration
Changes during run Ramp up or roll back freely Do not touch the split
Metrics Operational: errors, latency Product: conversion, retention, revenue
Ends when 100% and cleanup Pre-agreed sample size is reached
Requires stats No Yes

The part vendor marketing skips: most teams lack the traffic for A/B tests on most features. Detecting a small change in a conversion rate takes tens of thousands of users per variant, sometimes far more, and the sample grows rapidly as the effect gets smaller. A B2B product with a few thousand monthly active users cannot run a meaningful test on a checkout tweak; it should decide on qualitative feedback and a flag rollout instead.

If you do have the traffic, the rules are simple to state and easy to break:

  • Fix the primary metric, minimum detectable effect and sample size before starting; GrowthBook and PostHog include calculators.
  • Do not peek and stop early. Run to the planned sample or use a sequential method the tool supports explicitly.
  • Add guardrail metrics (error rate, load time, support tickets) so a "winning" variant that breaks something is caught.
  • Hash assignment from a stable user ID so a user gets the same variant across sessions and devices.
  • Run one experiment per surface at a time unless the tool manages mutual exclusion.

If a tool offers "experimentation" without sample-size guidance and confidence intervals, treat it as a rollout tool with a chart attached.

Feature flag tools compared in 2026

The market has consolidated around a few commercial platforms, a few strong open-source projects, and OpenFeature as the neutral API layer.

Tool Hosting model SDK coverage Targeting Experimentation Pricing model Open source
LaunchDarkly SaaS (relay proxy for on-prem evaluation) Broadest: server, client, mobile, edge Rich segments, contexts, scheduled changes Built-in, with stats engine Per seat plus usage; enterprise-oriented No
Unleash Self-hosted (Docker/Helm) or managed cloud Server and client SDKs for major languages Strategies, constraints, segments Basic variants; stats via external tools Free OSS core; paid enterprise features and cloud Yes
Flagsmith Self-hosted or SaaS Server, client, mobile, edge Segments, identities, overrides Multivariate flags; analytics through integrations Free tier; per-request and per-seat tiers Yes
GrowthBook Self-hosted or SaaS Server, client, mobile Attribute targeting, saved groups Strongest OSS stats: frequentist and Bayesian, sequential testing, warehouse-native Free OSS; paid cloud and enterprise Yes
PostHog SaaS or self-hosted Server, client, mobile Person properties, cohorts Integrated with product analytics; stats included Usage-based, per flag request Yes
OpenFeature Not a service: a spec and SDKs Every major language; providers for the tools above Delegated to the provider Delegated to the provider Free Yes (CNCF)
Homegrown Your database or config file Whatever you write Usually boolean or percentage None Engineering time N/A

How to read this:

  • LaunchDarkly is the reference for scale, governance and SDK breadth, and the most expensive; cost scales with seats and monthly contexts.
  • Unleash is the pragmatic self-hosted choice for teams that want flags inside their own network. Experimentation is thin by design.
  • Flagsmith is lighter, with per-identity overrides that suit B2B products enabling features per customer.
  • GrowthBook is the pick when experiments matter more than flags; it reads metrics straight from your data warehouse.
  • PostHog makes sense if you also want product analytics and session replay from one vendor and accept usage-based billing.
  • OpenFeature is not a competitor. Code against its API and switching vendors later becomes a provider swap, not a rewrite.
  • Homegrown means a features table and an admin page. It works for a dozen flags with no targeting; the moment someone asks for "10% of users in Germany", you are rebuilding Unleash with fewer tests.

A short OpenFeature example

OpenFeature gives you one API regardless of backend. Swapping LaunchDarkly for Unleash later means changing only the provider.

import { OpenFeature } from "@openfeature/server-sdk";
import { InMemoryProvider } from "@openfeature/server-sdk";
// In production: import a vendor provider, e.g. from @openfeature/launchdarkly-server-provider

const provider = new InMemoryProvider({
  "new-checkout": {
    disabled: false,
    variants: { on: true, off: false },
    defaultVariant: "off",
    contextEvaluator: (ctx) => (ctx.plan === "enterprise" ? "on" : "off"),
  },
});

await OpenFeature.setProviderAndWait(provider);
const client = OpenFeature.getClient();

export async function checkout(user: { id: string; plan: string }) {
  const useNewCheckout = await client.getBooleanValue(
    "new-checkout",
    false, // safe default when the provider is unavailable
    { targetingKey: user.id, plan: user.plan }
  );

  return useNewCheckout ? newCheckoutFlow(user) : legacyCheckoutFlow(user);
}

Three details matter more than the syntax: the default (false) is what runs if the provider is down, so it must be the safe path; targetingKey is the stable ID that makes rollouts sticky; and the context carries only the attributes rules need.

Flag hygiene: how feature flags become technical debt

Every flag is a branch that has to be understood, tested and eventually removed. Teams without a cleanup process end up with hundreds, nobody knows which are safe to delete, and the dashboard becomes a source of incidents. These are the practices that matter.

Every flag has an owner and an expiry. Record both at creation, in the tool's metadata or a manifest in the repo. Release flags expire two to four weeks after planned full rollout, experiment flags with the experiment, and permanent flags are marked permanent so a cleanup script never touches them.

Naming encodes intent. release-new-checkout, exp-pricing-page-cta, ops-disable-recommendations, perm-advanced-reporting. A reviewer can tell from the name whether the flag should still exist.

Removal is part of the feature. A PR that adds a release flag does not merge without a ticket to remove it.

Automate the nag. LaunchDarkly, Unleash and GrowthBook all report stale flags; send that weekly to the owning team. A script that diffs flag keys in the codebase against the tool catches the reverse: flags deleted in the dashboard but still evaluated in code.

Keep the count visible. Flags past expiry belong next to lead time and change failure rate. If it climbs, cleanup is losing to feature work.

Remove rather than keep "just in case". Once the new path has been at 100% for a release cycle, the old path is not a rollback plan. Version control has it.

Testing with feature flags

Flags multiply code paths, and untested paths reach production. Three levels keep this under control.

Unit tests use an in-memory provider. Never hit the real flag service from tests. With OpenFeature, InMemoryProvider lets a test run the code with new-checkout true, then false. Both branches are covered explicitly.

Integration and E2E suites run against the states that will exist in production. Not every combination; that explodes combinatorially. Many teams run E2E twice in CI: with the default flag set, and with all release flags forced on, the state after the next ramp.

Test the configuration, not just the code. A targeting rule is data that can be wrong. Manage flags as code (Unleash, Flagsmith and LaunchDarkly have Terraform providers) so changes go through review, and check in the pipeline that each flag's default is the safe one: old behavior for release flags, "enabled" for a kill switch guarding a dependency you want on. In a distributed system, a misconfigured flag in one service cascades.

Security: flags are not authorization

A client-side flag evaluation can be read and modified by the user; the SDK payload is visible in DevTools. That is fine when the flag hides a beta UI. It is a vulnerability when the flag is the only thing between a user and a paid feature or another tenant's data.

  • Enforce on the server. The frontend uses the flag to show the "Export report" button; the API checks the same flag, or better the actual entitlement, before returning the export. Never trust client-side evaluation for authorization.
  • No secrets or PII in flag rules. Segment names and flag keys ship to client SDKs.
  • Restrict who can flip what. Kill switches and permission flags need a specific role or second approver, and a queryable audit log.
  • Treat flag changes as production changes. They bypass CI. A flag flipped at 17:55 on a Friday is a deploy without a pipeline; on-call should see it next to deploys and alerts.

Entitlements that depend on contracts and billing belong in an authorization model, not a flag; our post on modern authentication and zero trust covers where those checks live.

Decision checklist

Choosing a tool

  • Targeting beyond on/off and percentage? If not, a config file or small table is enough for now.
  • Real A/B tests with enough traffic for significance? Shortlist GrowthBook, PostHog or LaunchDarkly. If not, do not pay for experimentation.
  • Flag data must stay in your network? Unleash or Flagsmith self-hosted; LaunchDarkly with the relay proxy if budget allows.
  • Features enabled per customer (B2B)? Prioritize per-identity overrides and an API support tooling can call.
  • Write against OpenFeature from day one; it is the cheapest insurance against lock-in you will buy.
  • Count dashboard seats. Seat-based pricing gets expensive when product, support and QA all need access.

Adding a flag

  • Which of the four types is it? Name it accordingly.
  • Who owns it and when does it expire?
  • What is the safe default if the flag service is unreachable?
  • Does the old code path still work after any schema change?
  • Is there a server-side check if the flag gates access, not just UI?
  • Is there a ticket to remove it?

Recommendation

Adopt feature flags for release control first, with ownership and expiry from day one; that alone removes most deploy anxiety and enables trunk-based development. Code against OpenFeature so the vendor is replaceable. Choose Unleash or Flagsmith if flags must stay self-hosted, LaunchDarkly if you need enterprise governance and can afford it, GrowthBook or PostHog if experiments are the point. Run A/B tests only where traffic makes them meaningful, and say so when it does not. Keep authorization on the server and delete flags as deliberately as you add them. At Arvucore we usually recommend starting with a self-hosted open-source tool behind OpenFeature and upgrading only when a specific capability justifies it.

Ready to Transform Your Business?

Let's discuss how our solutions can help you achieve your goals. Get in touch with our experts today.

Talk to an Expert

Tags:

feature flagsab testingdeployment strategiesfeature togglesopenfeaturerelease management
Arvucore Team

Arvucore Team

Arvucore’s editorial team is formed by experienced professionals in software development. We are dedicated to producing and maintaining high-quality content that reflects industry best practices and reliable insights.

Frequently asked questions

What is the difference between feature flags and feature toggles?
Nothing. Feature flags and feature toggles are two names for the same mechanism: a runtime switch that changes application behavior without a new deployment. Most vendors say flags; older literature says toggles.
Are feature flags the same as A/B testing?
No. A feature flag controls who sees a feature. An A/B test uses a flag for random assignment, then adds metric collection and statistical analysis to decide whether the variant is better. Every A/B test needs a flag; most flags are never an A/B test.
How long should a feature flag live?
Release flags should be removed within weeks of reaching 100% rollout. Experiment flags end with the experiment. Kill switches and permission flags are permanent by design and should be documented as such.
Can I use a client-side feature flag for authorization?
No. A flag evaluated in the browser or mobile app can be tampered with. Use flags to hide UI, but enforce access on the server or in the API. The flag decides what the user sees, not what the user is allowed to do.
Should I build my own feature flag system?
Only if your needs are a handful of boolean flags with no targeting, no experiments and no audit trail. Beyond that, an open-source tool such as Unleash, Flagsmith or GrowthBook costs less than maintaining a homegrown one, and OpenFeature keeps you free to switch later.
How do I test code that has feature flags?
Run the automated suite with the flag in each state that can reach production, use an in-memory provider in unit tests, and test the flag configuration itself so a bad targeting rule is caught before it reaches users.

Related articles

Deployment Strategies 2026: Blue-Green vs Canary vs Rolling

Deployment Strategies 2026: Blue-Green vs Canary vs Rolling

Rolling, blue-green, canary, feature flags, shadow and recreate compared on downtime, rollback speed, cost and DB compatibility, with Kubernetes examples.

CI/CD Best Practices for Reliable Software Delivery

CI/CD Best Practices for Reliable Software Delivery

At Arvucore, we help organizations streamline software delivery with practical CI/CD strategies. This article outlines ci cd best practices to improve reliability, speed, and collaboration across teams. Readers will learn how continuous integration, automated deployment, testing, and governance work together to reduce risk and accelerate time to market while aligning technical choices with business goals.

Cloud-First Strategy: Why Your Company Needs to Migrate to the Cloud

Cloud-First Strategy: Why Your Company Needs to Migrate to the Cloud

As digital transformation accelerates, adopting a cloud-first strategy is becoming essential for competitive businesses. This article from Arvucore explains why a company cloud migration is more than an IT project: it's a strategic shift that unlocks measurable cloud computing benefits such as agility, cost efficiency, and innovation. Readers will get practical insights to assess readiness, plan migration, and measure outcomes.

Docker and Kubernetes: Containerization for Enterprise Applications

Docker and Kubernetes: Containerization for Enterprise Applications

Enterprise IT teams are rapidly adopting Docker and Kubernetes to modernize deployment pipelines and scale microservices. This article explains how application containerization and container orchestration transform development, operations, and cost models for companies. We focus on practical migration strategies, governance, security, and vendor considerations to help business decision makers and technical leads evaluate container platforms for reliable production workloads.