Feature Flags & Experimentation Arena
Feature Flags & Experimentation — procurement report
ProductArena · rankings as of 2026-09-05 · evidence as of 2026-09-11 · 5 products · 54 judged requirements · 270 judged cells
Methodology: Every product is judged against a shared taxonomy of user stories using cited evidence — hands-on probes > repository code > independent community sources > vendor claims — never opinion. Full writeup: https://ultrametric.ai/productarena/methodology
Leaderboard
| # | Product | PA Score | Coverage score | Applicable cells | Confidence |
|---|---|---|---|---|---|
| 1 | Flagsmith | 42.2 | 50.3 | 51/54 | A |
| 2 | GrowthBook | 40.5 | 50.4 | 53/54 | A |
| 3 | Unleash | 36.7 | 42.0 | 52/54 | B |
| 4 | LaunchDarkly | 32.0 | 44.6 | 52/54 | B |
| 5 | Statsig | 31.8 | 32.2 | 52/54 | B |
PA Score = agent-readiness blend (see methodology). Coverage score = weighted share of judged requirements met. Confidence = how much of the score rests on tested vs claimed evidence (A–D).
Uncertainty note
The current #1/#2 gap in this arena is not close enough to qualify for the multi-judge uncertainty pass (or the pass has not covered it yet) — no extra caveat applies beyond the per-product confidence grades above.
Buyer checklist (RFP)
The arena's 54 judged user stories as requirements, grouped by theme. Priorities mirror the story weights our scoring uses (3 = must-have, 2 = should-have, 1 = nice-to-have). Interactive version with per-requirement verdicts for the top products: /arena/feature-flags/checklist
Agenticness — how well agents can access and operate the productAgenticness
How well agents can access and operate the product
- ai-native userPlug MCP servers into this product so it can use their toolsmust-have
- ai-native userConnect an agent via an official MCP servermust-have
- ai-native userDrive the product through a documented public APImust-have
- ai-native userDelegate tasks to a built-in AI assistant inside the productmust-have
- ai-native userPoint an agent at llms.txt or agent-oriented docsshould-have
- ai-native userRun the product headlessly / in CI for automationshould-have
- ai-native userUse an official CLIshould-have
- ai-native userIssue scoped/least-privilege API credentials for an agentshould-have
- ai-native userBuild against official SDKsshould-have
- ai-native userSubscribe to events via webhooksshould-have
- ai-native userGet AI-generated insights and suggestions from my data inside the productshould-have
- ai-native userSet up automations that run autonomously in the backgroundshould-have
- ai-native userOperate the product with natural-language commandsshould-have
- ai-native userExplore an interactive API reference with runnable examplesshould-have
- ai-native userDownload a machine-readable API spec (OpenAPI or equivalent)should-have
- ai-native userRely on versioned APIs with a documented deprecation policyshould-have
- ai-native userTest against a sandbox environment without touching production datanice-to-have
Automation depth — how much of the product can run unattendedAutomation depth
How much of the product can run unattended
- ai-native userDefine rules that trigger actions automatically on eventsmust-have
- ai-native userPerform bulk operations across many items at onceshould-have
- ai-native userSchedule recurring jobs or workflowsshould-have
- ai-native userVersion, review, and roll back my automationsnice-to-have
Deployment self host — stories about deployment self host in this arenaDeployment self host
Stories about deployment self host in this arena
- platform engineerSelf-host the full flag platform from an open-source distribution, keeping evaluation data on my infrastructuremust-have
- platform engineerRun a relay/edge proxy so flags stay served when the vendor is unreachable and SDK traffic stays inside my networknice-to-have
Experimentation — stories about experimentation in this arenaExperimentation
Stories about experimentation in this arena
- product managerRun A/B and multivariate experiments on flags and see which variation wins on my metricsmust-have
- product managerTrust a documented statistics engine (Bayesian or frequentist, with variance-reduction options) behind experiment resultsshould-have
- product managerDefine experiment metrics from my own data — warehouse tables or ingested events — instead of a black-box metric storeshould-have
- ai agentRead experiment configurations and results programmatically to summarize outcomes and recommend ship/rollback decisionsnice-to-have
Flag management — stories about flag management in this arenaFlag management
Stories about flag management in this arena
- developerCreate a feature flag and toggle it live in production within minutes of signing upmust-have
- developerTarget flags with attribute-based rules and reusable segments so the right users see the right variationmust-have
- developerManage separate environments (dev/staging/prod) with independent flag states and scoped SDK keysshould-have
- developerServe multivariate flags and dynamic configuration values (strings, numbers, JSON), not just booleansshould-have
- platform engineerFind stale flags and code references so temporary flags actually get removed from the codebaseshould-have
- developerTarget or exclude specific individual users for a flag (allowlists, beta testers, internal accounts)nice-to-have
Governance audit — stories about governance audit in this arenaGovernance audit
Stories about governance audit in this arena
- ai agentCreate and toggle flags through documented APIs, CLIs, or MCP — and the platform can force my changes through approval workflows instead of letting me write to production unreviewedmust-have
- platform engineerRequire approvals or change requests before production flag changes go livemust-have
- platform engineerEvery flag change is recorded in an audit log — who changed what, when, and to which valuemust-have
- platform engineerRestrict who can change which flags with roles, permissions, and scoped API tokensshould-have
Openness — open source, data portability, and self-hosting storiesOpenness
Open source, data portability, and self-hosting stories
- ai-native userExport all of my data in open formats and leavemust-have
- ai-native userSelf-host the core productmust-have
- ai-native userDo everything through the API that I can do in the UIshould-have
- ai-native userRead the product's source under an open licenseshould-have
Pricing plans — plan structure and value — what each tier costs and what it unlocksPricing plans
Plan structure and value — what each tier costs and what it unlocks
- product managerSee published pricing and understand what drives cost (seats, MAUs, events, requests) before committingshould-have
Privacy posture — data-handling and privacy storiesPrivacy posture
Data-handling and privacy stories
- ai-native userPrevent my data from being used to train AI modelsmust-have
- ai-native userChoose where my data is stored (region/residency)should-have
- ai-native userControl data retention and deletionshould-have
- ai-native userOpt out of telemetry and usage trackingshould-have
Rollouts releases — stories about rollouts releases in this arenaRollouts releases
Stories about rollouts releases in this arena
- developerRoll a flag out progressively by percentage with consistent bucketing, ramping from 1% to 100% without redeployingmust-have
- platform engineerGuard a rollout with metrics so a regression is detected and the release is rolled back automaticallyshould-have
- developerSchedule flag changes and releases to happen at a specific future timenice-to-have
Sdk delivery — stories about sdk delivery in this arenaSdk delivery
Stories about sdk delivery in this arena
- platform engineerMy server SDKs evaluate flags locally from a cached ruleset — microsecond decisions with no network call per flag checkmust-have
- platform engineerEvaluate flags at the edge (CDN workers or an edge/relay layer) close to usersshould-have
- developerUse official SDKs across my whole stack — backend, web, and mobile — with consistent flag behaviorshould-have
- developerFlag changes propagate to connected SDKs in seconds via streaming or fast polling — a kill switch actually killsshould-have
- platform engineerUse the vendor through OpenFeature providers so my flag code isn't locked to one vendor's SDK APInice-to-have
Appendix: recorded probes
Hands-on probe recordings — transcripts/videos a human can replay, the strongest evidence tier. Watch them at https://ultrametric.ai/productarena/proofs
- Flagsmith
docker run -d postgres:16-alpine && docker run -d -p 18000:8000 flagsmith/flagsmith && POST /api/v1/auth/users/ && POST /organisations/ && POST /projects/ && POST /environments/ && POST /features/ {pa_probe_flag} && curl /api/v1/flags/ -H "X-Environment-Key: <key>"terminal · recorded 2026-09-05 · exit 0 - Flagsmith
curl -si -X POST https://mcp.flagsmith.com -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-05 · exit 0 - GrowthBook
docker run -d mongo:6 && docker run -d -p 13100:3100 growthbook/growthbook && POST /auth/register && POST /organization && POST /feature {id: pa-probe-flag} && POST /sdk-connections && curl /api/features/<sdk-key>terminal · recorded 2026-09-05 · exit 0 - GrowthBook
echo '<jsonrpc initialize>' | npx -y @growthbook/mcpterminal · recorded 2026-09-05 · exit 0 - LaunchDarkly
ldcli --version # installed via `brew tap launchdarkly/homebrew-tap && brew install ldcli`terminal · recorded 2026-09-05 · exit 0 - LaunchDarkly
curl -si -X POST https://mcp.launchdarkly.com/mcp/launchdarkly -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-05 · exit 0 - LaunchDarkly
echo '<jsonrpc initialize>' | npx -y @launchdarkly/mcp-server start --transport stdioterminal · recorded 2026-09-05 · exit 0 - Statsig
npx -y @statsig/siggy --versionterminal · recorded 2026-09-05 · exit 0 - Statsig
curl -s -X POST https://docs.statsig.com/api/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-05 · exit 0 - Statsig
curl -si -X POST https://api.statsig.com/v1/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-05 · exit 0 - Unleash
docker run -d postgres:16-alpine && docker run -d -p 14242:4242 -e INIT_ADMIN_API_TOKENS=... -e INIT_CLIENT_API_TOKENS=... unleashorg/unleash-server && POST /api/admin/projects/default/features {pa-probe-flag} && POST .../strategies && POST .../environments/development/on && curl /api/client/features/pa-probe-flagterminal · recorded 2026-09-05 · exit 0 - Unleash
curl -s -X POST https://docs.getunleash.io/_mcp/server -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-05 · exit 0
Cite as: ProductArena by Ultrametric Inc, Feature Flags & Experimentation arena, rankings as of 2026-09-05 — https://ultrametric.ai/productarena/arena/feature-flags
License: © 2026 Ultrametric Inc. Brief quotation of individual verdicts, scores, or evidence excerpts is permitted with attribution to "ProductArena by Ultrametric Inc (ultrametric.ai/productarena)", as is use of the data to evaluate, contest, or contribute corrections. Bulk copying, redistribution, or use to build competing datasets requires prior written permission (see DATA-LICENSE in the repository).
No liability: rankings, verdicts, and scores are research outputs derived from the cited evidence at a point in time, provided "as is", without warranties. Ultrametric Inc accepts no responsibility for procurement, purchasing, or other decisions made in reliance on them — verify against the cited evidence before acting (https://ultrametric.ai/productarena/terms).