# Onboarding experiments

Run a controlled A/B test with a predefined primary goal, explicit exposures and interpretable uncertainty.

## Prepare the experiment

1. Verify the app, published flow and SDK key share the same application scope.
2. Ship both native branches before testing coded variants, or validate supported declarative layouts with your renderer.
3. Send a real flow step event and verify it in Aplyna.
4. Choose one primary goal before starting: onboarding completion or an SDK trial-start signal.
5. Set the traffic split and fixed exposure target per variant, then start the draft experiment.

## Assignment and exposure

Request an assignment before selecting the onboarding branch. The server persists the assignment for the installation while the experiment runs. Call expose only when that assigned UI becomes visible, then attach the assignment to subsequent step and goal events.

> **Installation identity matters**
> Use a persisted installation ID. Generating a fresh ID each launch breaks journey continuity and may inflate the installation denominator. An installation is not a cross-device authenticated customer identity.

## What counts as a conversion

Only explicit exposures form the denominator. A conversion must match the experiment, installation and variant, and occur after exposure. SDK trial_started is a journey event rather than a store-verified purchase or trial record.

## Read the result

| Result | Interpretation |
| --- | --- |
| Conversion rate | Conversions divided by exposed installations for that variant. |
| Absolute difference | Difference in conversion rates, with a 95% Newcombe–Wilson interval. |
| Relative lift | A descriptive comparison, not a guarantee or automatic shipping decision. |
| Completed results | Frozen at the server receipt cutoff after the defined exposure targets are met; later receipts are excluded. |

Account for conversion lag, randomization quality, repeated looks and multiple comparisons. An interval spanning zero does not establish which variant is better. Review the full context before changing your shipped experience.

## Pause, resume and complete

Pause stops new assignment delivery. Resume preserves stored assignments. Completion requires the predefined target for both variants. There is no automatic winner deployment. The pilot has one production environment; additional targeting, guardrail metrics, delayed-conversion windows and automated rollout remain future work.

- [Instrument assignments](https://aplyna.com/docs/existing-onboarding): Swift and Kotlin exposure callback examples.
- [Charts & metrics](https://aplyna.com/docs/analytics): Reporting boundaries and unavailable values.
