Migration is a multi-touch campaign run on a live subscriber base — emails, web checkouts, billing transitions, support flows. Like any campaign at that scale it carries risks. The Controlled Migration Framework keeps those in check by running the migration in waves, with each wave gated on the prior wave’s results.Documentation Index
Fetch the complete documentation index at: https://recurr.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
The shape
A typical engagement runs like this:Pilot — 1 to 3 small waves
Each pilot wave targets a small, low-risk cohort (1,000–1,500 subscribers). Pilots run in parallel against a matched IAP holdout so churn impact is measurable.
Migration — 5 to 7 cohort waves
Each migration wave targets up to 10% of the eligible base, sequenced by which cohort axes cleared during pilot. Waves run over 1–2 week windows.
Why waves, not bulk
A single bulk migration would be operationally simpler — one email blast, one cutover. It’s the wrong move at scale because:- Churn impact is unknowable until you’ve measured. Bulk migration makes the pilot question (“does this hurt retention?”) moot — you’ve already migrated everyone before you know the answer.
- Cohort response varies. Annual subscribers respond differently from monthly. Year-1 cohorts respond differently from long-tenure ones. Bulk treats them all identically.
- Rollback isn’t free. If a cohort responds poorly to the migration offer, you want to pause + adjust, not unwind a completed cutover.
Wave gating
Every wave has explicit gating criteria agreed before kickoff. The defaults:- Migration rate within ±10 percentage points of pilot baseline
- Holdout-relative churn delta within ±2 percentage points
- Web-side billing health — failed payments, refund rate, dispute rate within Stripe norms
- Support volume — no abnormal spike in tickets tagged to the migration touchpoints
