# Test Lifecycle

Draft, running, paused, completed, archived — what each state means, which transitions are allowed, and when you can edit, delete, duplicate, or restore.

Every test in Otter moves through five states — draft, running, paused, completed, archived — and a handful of well-defined actions move it between them. This page is the complete reference.

The lifecycle exists to protect the integrity of your results. Drafts are fully editable because they have no visitor data; everything else is progressively locked because real conversions are riding on the configuration. Most of the rules below come down to one principle: **once visitors are involved, you can't silently change the experiment.**

## The five states

### Draft (`draft`)

Not yet visible to visitors. The only state where every wizard field can be edited.

- Edit anything: variants, goals, targeting, URL match, traffic split.
- Delete is allowed — drafts can be removed entirely.
- No visitor data exists yet.
- Restore-version is available to roll back to a prior snapshot.

### Running (`running`)

Live. The SDK is assigning visitors to variants and recording conversions.

- Wizard fields are locked. Test name and collaborators can still change.
- Pause to freeze new assignment; Complete to mark the test finished.
- Cannot be deleted — duplicate or archive instead.

### Paused (`paused`)

No new assignments. Already-assigned visitors keep seeing their variant; conversions still count.

- Reversible — Resume sends you back to running.
- Use Pause when you need to investigate something without losing data.
- Complete from here to end the experiment cleanly.

### Completed (`completed`)

Experiment is over. Results are frozen — no new assignments, no new conversions.

- Resume is allowed unless the scheduled end date has passed.
- Archive moves it out of the main list once you no longer need quick access.

### Archived (`archived`)

Hidden from the main list for tidiness. Data is preserved.

- Still readable — switch the experiments list filter to Archived.
- Unarchive puts it back in Completed, with results untouched.
- Can be duplicated to spin up a new draft from the configuration.
- Not deletable from the dashboard.

## Allowed transitions

Anything not listed here is blocked by the model. Attempting an invalid transition raises a clear error and leaves the test in its current state.

| From | Action | To | Notes |
| --- | --- | --- | --- |
| Draft | `Start` | Running | Runs a readiness check: at least 2 variants, exactly 1 control, at least 1 goal, exactly 1 primary goal, and a connected GA4 property if any goal is a GA4 event. Rejected with a clear message if anything is missing. |
| Running | `Pause` | Paused | Stops new assignments; existing visitors keep their variant. |
| Running | `Complete` | Completed | Records ended_at; freezes assignment and conversions. |
| Paused | `Resume` | Running | Resumes new assignments and conversion tracking. |
| Paused | `Complete` | Completed | Ends the test cleanly without resuming first. |
| Completed | `Resume` | Running | Blocked if the scheduled end date has passed — update it first. |
| Completed | `Archive` | Archived | Hides the test from the default list. Data is preserved. |
| Archived | `Unarchive` | Completed | Reversible — brings the test back into the Completed filter. Results are unchanged. |
| Any | `Duplicate` | Draft (new) | Creates a fresh draft with the same configuration. No data carried over. |
| Draft | `Restore version` | Draft | Replaces the current draft config with a prior snapshot. Drafts only. |

## Automated transitions

The table above covers the manual actions you trigger from the dashboard. Tests can also transition automatically: a draft with a future start time moves to running when that time arrives, a running test with a future end time moves to completed when that time arrives, and a running test with stop conditions moves to completed when a condition trips. See the [Scheduled Start & End](https://www.otterab.com/docs/building-tests/scheduled-tests) and [Stop Conditions](https://www.otterab.com/docs/building-tests/stop-conditions) sections for the full rules, and the [Activity Log](https://www.otterab.com/docs/analyzing-results/activity-log) for how each transition is recorded.

> **Practical rules of thumb:**
>
> - **Finalize everything before Start.** Wizard fields lock the moment a test leaves draft. The five minutes you spend triple-checking the goal config save you a rerun later.
> - **Pause when in doubt — Complete when done.** Pause is the no-regrets state for "something seems off, let me investigate." Complete signals the experiment is over and freezes the result.
> - **Use Duplicate, not Edit, when the test needs to change.** If you discover mid-test that the goal is wrong or a variant has a bug, complete the test, duplicate it into a new draft, fix the issue, and start fresh. Mid-flight edits would invalidate the collected data anyway.
> - **Archive for tidiness, not deletion.** Archived tests still exist and can be referenced or duplicated. There's no way to permanently delete a test that has collected real data, by design.

## Frequently asked questions

### What are the test states and what do they mean?

Five states. Draft is the only one where the test isn't visible to visitors and you can edit anything. Running means visitors are being assigned to variants and conversions are tracked. Paused freezes assignment for new visitors but keeps the test visible to those already in it. Completed marks the test ended with results frozen — no new assignments, no new conversions. Archived hides completed tests from the main list for tidiness.

### Which transitions are allowed?

Draft → Running via Start (after a readiness check). Running → Paused via Pause, or → Completed via Complete. Paused → Running via Resume, or → Completed via Complete. Completed → Running via Resume (unless the scheduled end date has already passed). Completed → Archived via Archive. Archive is one-way from the dashboard; you can still see archived tests under the Archived filter.

### Can I edit a test after I start it?

No. Once a test moves out of draft, the wizard, variants, goals, targeting, and URL fields all lock. Edit-style metadata like the test name and collaborators can still change. To meaningfully change a running test, you have two options: complete or pause it and duplicate it as a new draft, or restore a prior version (which creates a fresh test from that snapshot).

### Can I delete a test?

Only drafts can be deleted, and the dashboard makes that explicit — Delete is enabled on drafts and disabled elsewhere. Running, paused, completed, and archived tests have all collected real visitor data; deleting that data would be irreversible and would orphan revenue and conversion records. Use Archive to get a completed test out of the way without losing the result.

### What does Start actually do?

It runs a readiness check: at least 2 variants, exactly 1 marked as control, at least 1 goal, exactly 1 goal marked as primary, and (if any goal is a GA4 event) a connected GA4 property. If everything passes, the test records its started_at timestamp, flips to running, and the SDK begins assigning visitors on the next pageview. If the check fails, the start is rejected and the test stays a draft with the specific error shown so you can fix it.

### What happens when I pause a test?

New visitors stop being assigned. Visitors who already have an assignment keep seeing their variant (assignment is sticky) — so paused tests aren't quite frozen, they just stop growing. Conversions from already-assigned visitors continue to count. Pause is reversible via Resume and is the right state when you need to investigate something without losing data.

### What's the difference between Pause and Complete?

Pause is temporary and reversible; Complete is meant to mean &ldquo;the experiment is over and I've made a decision.&rdquo; Both stop new assignments. Complete additionally records an ended_at timestamp and stops counting conversions from existing visitors (the result freezes). You can Resume a completed test if you change your mind, as long as the scheduled end date hasn't passed.

### What does Resume do, and why is it sometimes blocked?

Resume moves a paused or completed test back to running, re-enabling new assignments and continuing to count conversions. If you set a scheduled end date on the test and it's already passed, resume is blocked — the test would &ldquo;finish&rdquo; the moment it started, which is rarely what you want. Update the end date first, then resume.

### How does duplicate work?

Duplicate creates a brand-new draft with all the configuration of the source test — variants, goals, targeting, URL match — but no visitors, no assignments, and no conversions. The duplicate opens straight into the wizard so you can adjust whatever's different about the new test before launching.

### What's version restore for?

Every meaningful edit to a draft creates a new test version (a snapshot of the configuration). Restore-version lets you roll a draft back to a previous snapshot if a recent edit broke something — variants, goals, targeting all revert. Restore only applies to drafts; running and completed tests are frozen.

### Can I schedule a test to start or end automatically?

Yes — both. A draft with a scheduled start date auto-transitions to running when that time arrives (subject to a readiness check that the test has at least 2 variants and 1 goal). A running test with a scheduled end date auto-transitions to completed when that time arrives. The background checker runs every 5 minutes, so expect a small lag. See the Scheduled Start &amp; End section for full semantics.

### Where do archived tests go?

Nowhere — they stay in the database with all their data. Archiving just hides them from the main test list so it doesn't clutter when you have lots of completed work. Switch the list filter to Archived (or All) to see them again. You can read results, duplicate them, or just keep them as a record.

---

Canonical page: https://www.otterab.com/docs/building-tests/test-lifecycle
