A/B Experiments
An experiment doesn't invent its own variants — it watches a flag's targeting rule and measures the variations that rule already serves. So the thing you test is exactly the thing you ship, with nothing to reconcile between them.
A lens on a rule
Attach an experiment to one of a flag's targeting rules and it starts measuring. The flag still decides which variation each person gets; the experiment simply records exposures and outcomes for the variations that rule rolls out.
checkout-ctamobile-users — control / treatmentSticky assignment
Assignment is deterministic: the same person always lands in the same variation for the life of the experiment. It works for signed-in identities and anonymous installs alike, so results aren't muddied by someone flip-flopping between versions.
{
"experimentId": "exp_9f3c…",
"principalId": "usr_1a2b…",
"variationKey": "treatment",
"assignedAt": "2026-07-18T14:22Z"
}Exclusion layers
Run many experiments at once without letting them contaminate each other. Put them in a shared exclusion layer and each person falls into at most one — once they're bucketed into an experiment, they're held out of the rest in that layer.
one user → one experiment per layer
Lifecycle
An experiment moves through a clear lifecycle — drafted, running while it gathers exposures, paused if you need to hold, and completed or archived when the call is made.
Keep exploring
Flags, A/B tests, rollouts, and results — one system.
Typed flags with targeting rules and deterministic bucketing.
Ramp the winner automatically, with guardrails that halt on regression.
Real statistics from your analytics, with a ship / don't-ship call.