An A/B test is a weighted split in the workflow graph. Each subscriber run is assigned to one route, and the workflow dashboard compares conversion rates from your global success goals.

## What A/B testing does

- Assigns each run to exactly one weighted branch
- Keeps the assignment stable if that run retries the split step
- Lets each branch contain different emails, waits, actions, or subgraphs
- Attributes success when the run records a configured success goal

It does not create email variants automatically, calculate statistical significance, select a winner, or move future traffic to the leading branch.

## Add an A/B test

1. Click the plus control where the experiment should begin.
2. Choose **A/B test**.
3. Select the split node.
4. Name each variant by what actually differs.
5. Set percentages that total exactly 100%.
6. Replace each branch placeholder with its first real step.

![A/B test configuration with two named weighted variants](/docs/workflows/ab-test-config.png)

For two variants, the slider keeps both percentages complementary. Multi-variant tests expose a percentage for each route; the total indicator must reach 100% before publishing.

## Build useful variants

Change one meaningful variable at a time when you want an interpretable result:

| Test           | Variant A        | Variant B      |
| -------------- | ---------------- | -------------- |
| Subject line   | Benefit-led      | Curiosity-led  |
| Offer timing   | Send immediately | Wait one day   |
| Call to action | Book a call      | Start checkout |
| Nurture length | Two emails       | Four emails    |

Each path needs its own email step when email content differs. Do not point two branches at one email and expect separate content.

## Define success before publishing

A/B results use top-level **Success goals**, not merely reaching the end of a branch. Open **Settings > Goals** and define the same conversion signal for every variant.

Good success signals include:

- Payment for a specific product
- Customer tag added
- Booking field populated
- Minimum lifetime revenue reached
- A downstream workflow goal reached

Use `Complete workflow` only when conversion should stop all remaining nurture steps. Otherwise Lumail records the conversion and lets the run continue.

Read [Goals and Success Goals](/docs/workflows/workflow-goals) for event and filter semantics.

## How assignment works

Lumail derives a stable percentage from the run ID and split-step ID. A retry of the same run remains in the same variant. A later repeat enrollment creates a new run and may receive a different variant.

Changing weights affects runs that reach the newly published split version. Existing runs remain pinned to the version and definition with which they enrolled.

## Read the results

The workflow dashboard shows assigned runs, successful runs, and conversion rate for every branch.

![Workflow dashboard A/B success results with assignment and conversion counts](/docs/workflows/ab-test-results.png)

Conversion rate is:

```text
successful runs / assigned runs × 100
```

Only non-dry runs count. A run is successful when it has a recorded success goal. If several success goals could match, the first matching goal in workflow order is recorded.

## Interpret results carefully

- Wait until each variant has enough assignments for the difference to be meaningful.
- Compare the same time window and conversion definition.
- Account for delayed conversions before declaring a winner.
- Do not compare a newly edited variant against historical traffic from an older version without noting the version change.
- Check deliverability and click behavior when a conversion difference may be caused by email delivery rather than copy.

Lumail displays observed rates; it does not currently claim statistical significance.

## Common mistakes

| Mistake                                              | Result                                                   |
| ---------------------------------------------------- | -------------------------------------------------------- |
| Percentages do not total 100%                        | Publishing validation fails                              |
| No success goal                                      | Assignments appear, but every success count remains zero |
| Different conversion criteria per branch             | Rates are not comparable                                 |
| Several variables change at once                     | You cannot identify what caused the result               |
| Editing after launch without a new analysis boundary | Old and new variant behavior become mixed conceptually   |

## Related documentation

- [Branching](/docs/workflows/workflow-branching)
- [Goals and Success Goals](/docs/workflows/workflow-goals)
- [Publishing and Versions](/docs/workflows/workflow-publishing)
- [Test Runs and Results](/docs/workflows/workflow-testing)
