Experiment lifecycle

An experiment moves through four states. Transitions are explicit — you trigger each one, except that nothing ever leaves live on its own. In the dashboard, inactive is labelled "Concluded."

draft
launch
live
conclude
inactive
archive
archived

inactive → live via reactivate is the only backward move.

States and transitions

FromActionToWhat it does
—CreatedraftCreates the experiment and its two arms at zero. Requires an active or trialing account.
draftLaunchliveStamps launched_at. From now the SDK assigns variants and records events. Requires an active or trialing account.
liveConcludeinactiveYou record a decision — shipped variant, kept control, or shipped neither, plus optional notes. Stamps concluded_at and freezes a full stats snapshot.
inactiveReactivateliveClears the recorded decision and the frozen snapshot, and resumes live assignment and stat computation against the existing arm counts. Requires an active or trialing account.
inactiveArchivearchivedPermanent. Deletes the per-session rows (see below). The experiment becomes read-only.

Every transition is guarded: launching something that isn't a draft, concluding something that isn't live, or archiving something that isn't inactive all fail. There is no direct live → archived — you conclude first.

What's editable in each state

Fielddraftliveinactivearchived
Name✅✅✅—
Hypothesis✅✅✅—
Control description✅———
Variant description✅———
Conversion goal✅———

The three defining fields — what control is, what variant is, what counts as a conversion — lock when you launch, so a running experiment can't have its terms changed underneath the data. Name and hypothesis stay editable until the experiment is archived. An archived experiment rejects all edits.

What happens to your data

Arm counts — impressions and conversions per arm — are kept indefinitely, through every state. They are the permanent record every statistic is derived from.

On conclude, the current statistics (probability, expected loss, credible intervals, relative lift, decision label) are computed once and stored on the experiment. While it's inactive or archived, the dashboard shows that frozen snapshot rather than recomputing — the result you concluded on is the result you keep. Reactivating discards the snapshot and goes live again.

On archive, the per-session rows that back deduplication and one-conversion-per-session are deleted. Aggregate arm counts and the frozen snapshot remain; the granular session history does not. This is why archive is one-way.

While inactive or archived

The SDK's config endpoint reports the experiment as not live, so getVariant() returns control for everyone and any impression or conversion events are dropped. Remove or update the experiment id in your integration once you've concluded.

For how the frozen statistics are calculated, see How the statistics work.