
How to roll back a broken mobile onboarding experiment without an app update
Emergency rollback playbook for broken onboarding experiments using channel pins and version control.
You shipped a new onboarding variant Friday afternoon. By Saturday, support tickets mention a blank screen. Trial starts drop 40%. The engineer who published the flow is offline. App Store review is five days away. You need to roll back a broken mobile onboarding experiment now, not after the next binary.
If onboarding runs through Rheo (or an equivalent remote flow platform), rollback is a channel pin change, not an emergency release. This playbook covers detection, immediate containment, rollback steps, verification, and post-incident hygiene so the same failure mode is harder next time.
When rollback is the right response
Not every dip needs rollback. Distinguish incident from noise.
| Signal | Likely incident | Likely noise |
|---|---|---|
| Crash rate on flow screens | Spike | Flat |
| Completion rate | -30% or more same day | -5% over 3 days |
| Blank or stuck screen reports | Multiple tickets | One old device |
| RevenueCat errors at paywall step | Clustered failed outcomes | Sandbox only |
| Experiment arm only affected | Yes | All traffic down (SDK or API) |
Rollback when user-facing functionality is broken or materially worse with high confidence. Pause experiment when results are unclear but not catastrophic. Let run when variance is within pre-registered bounds.
Architecture: what you are rolling back
Understanding the object model speeds incident response.
| Concept | What it is | Rollback lever |
|---|---|---|
| Flow draft | Unpublished editor state | Irrelevant to live users |
| Published version | Immutable snapshot | Pin target |
| Channel | SDK route (ch_live_…) | Assignment |
| Direct pin | 100% traffic to one version | Fastest rollback |
| Experiment | Split traffic across versions | End or pause, then pin winner or control |
| Integration step | RevenueCat paywall node, etc. | Version may reference offering ids |
Publishing a new version does not change live traffic until a channel points at it. Rollback means re-pointing the channel to a known-good published version.
Rheo does not manage paywall UI. If the incident is inside RevenueCat paywall templates, rollback may require switching offering or placement in the flow version, or disabling a RevenueCat Experiment in their dashboard. This guide focuses on onboarding flow rollback in Rheo.
Immediate containment (first 15 minutes)
1. Confirm scope
Check Rheo analytics (or your monitoring):
- Which channel? Live vs test.
- Experiment active or direct pin?
- Which variant arms show the cliff?
- App version and platform filters (iOS only often means a platform-specific layer).
2. Notify stakeholders
Short message template:
Onboarding incident: [channel name]
Symptom: [completion down X% / blank screen on step Y]
Action: rolling channel pin to [version label]
Owner: [name]
ETA: 5 minutes
3. Stop bleeding
Choose the fastest path:
| Situation | Action |
|---|---|
| Experiment running | End experiment or set 100% to control arm, then pin control version directly |
| Direct pin to bad version | Pin previous known-good version |
| Uncertain which version is good | Pin labeled baseline (pre-black-friday-baseline) |
| Bad integration config | Pin version before integration change; verify RevenueCat toggle |
You do not need App Store review for pin changes. Users pick up assignment on next resolve (typically next cold start or foreground refresh).
Step-by-step rollback procedure
Option A: Roll back direct channel pin
- Log in to Rheo dashboard → Apps → your app → Channels.
- Open the affected live channel.
- Open assignment history or version list.
- Select the last known-good published version (read label and timestamp).
- Set assignment to Direct pin to that version.
- Confirm. If your workspace uses rollout approvals on Scale+, an approver must approve the pin request. For incidents, have approver on call.
- Document pin change in incident channel.
Option B: Roll back experiment mid-flight
- Open Experiments on the channel.
- Note which arm is control (first variant in list).
- Promote control to channel pin, or end experiment and direct-pin control version.
- Verify traffic weights show 100% on good version.
- Archive or label failed variant
incident-2026-08-26-do-not-reuse.
Option C: Roll back integration-related failure
If the break is RevenueCat paywall presentation (not Rheo screens):
- Pin flow version that uses previous offering or placement id.
- Verify App settings → Integrations → RevenueCat default offering unchanged or revert.
- Confirm paywall node in pinned version references valid offering.
- Test on device with sandbox account.
Rheo blocks publish when paywall nodes exist but integration is disabled. A partial misconfiguration may still serve broken handoff edges.
Verification after rollback
| Check | Pass criteria |
|---|---|
| Dashboard completion rate | Recovering toward baseline within hours |
| Step funnel | Bad screen no longer dominant cliff |
| Test device cold start | Full path through paywall or dismiss |
| RevenueCat outcomes | purchase_completed and dismissed fire, not only failed |
| Support queue | No new blank-screen tickets |
| Experiment status | Not splitting traffic to bad arm |
Keep a test channel (ch_test_…) pinned to candidate versions before live promotion next time. QA on test channel would have caught many incidents.
Rollback without dashboard access
If dashboard is unreachable, escalation paths:
| Fallback | Notes |
|---|---|
| Secondary editor account | Pre-provisioned approver |
| API automation | If your team scripted channel pins |
| Pin via support | Vendor support for account lockout only |
| Feature flag in host app | Only if you built emergency bypass to legacy native onboarding |
Best practice: maintain legacy onboarding path in the binary behind a host-app flag for catastrophic Rheo outage. That is engineering-owned, not daily workflow.
Version labeling discipline
Rollback is fast only if good versions are findable.
| Bad label | Good label |
|---|---|
v2 | 2026-08-20-baseline-onboarding |
Copy of Flow | pre-permission-reorder-control |
Test | live-approved-aug-w1 |
Label at publish time. Include ticket or experiment id in description field.
Preventing repeat incidents
Pre-publish checklist
| Item | Owner |
|---|---|
| Simulator walkthrough all branches | Editor |
| Test channel pin 24h for internal QA | Editor |
| Fallback edge on paywall node present | Editor |
| Publish diff reviewed by second person | Scale approvals policy |
| Rollback version identified in experiment doc | Growth |
Experiment guardrails
| Policy | Rationale |
|---|---|
| No Friday live pins without on-call | Weekend incidents |
| Max 50% to unproven variant first week | Limit blast radius |
| Holdout 5 to 10% on major rewrites | Incrementality and safety net |
| One structural change per experiment | Easier rollback attribution |
Monitoring alerts
Configure alerts (even manual daily checks) on:
- Flow starts drop week over week
- Completion rate drop greater than 20%
- Spike in
surface_outcome: failedon paywall step - Crash logs tagged with Rheo screen ids
Post-incident review template
Within 48 hours:
- Timeline: publish, live pin, detection, rollback, recovery.
- Root cause: bad layer config, missing fallback, wrong offering id, copy error.
- Why QA missed: test channel skipped, device matrix gap.
- Action items: label policy, approval rule, automated test.
- Do not reuse failed version; fork from last good.
Store review in shared doc linked from experiment ticket.
Relationship to App Store releases
| Change | Requires binary? |
|---|---|
| Channel pin to older published version | No |
| Channel pin to newer published version | No |
| New native layer type not in SDK | Yes |
| SDK upgrade | Yes |
| RevenueCat SDK major bump | Usually yes |
Rollback in Rheo assumes the broken experience was introduced via remote publish, not via a new SDK that cannot render an old manifest. If a new SDK version mis-renders old manifests, rollback may require binary revert, a rarer case.
Summary
Roll back a broken mobile onboarding experiment by pinning the live channel to the last known-good published flow version, or by promoting experiment control to 100% traffic. No App Store update required for flow-level rollback. Verify on device, watch completion recovery, and label versions so the next incident resolves in minutes not days.
Keep a test channel, a named baseline pin, and an on-call approver for production channels. Remote experimentation is only safe when rollback is practiced before you need it.