How Holdout Groups Keep Subscription Onboarding Tests Honest
·Experiment design

A holdout group is a segment of users who continue receiving the original control experience even after you roll a winning variant to the majority of your traffic. This persistent control group lets you measure the cumulative impact of your onboarding optimizations over time, isolating the revenue lift attributable to your changes rather than external factors like seasonality, marketing campaigns, or product improvements.
Without a holdout, you'll never know whether your new onboarding flow actually drives better subscription results or whether overall business trends coincidentally improved at the same time. The holdout acts as a counterfactual, showing what would have happened if you'd made no changes at all, which is the only way to prove your optimizations work.
Why You Can't Trust Before-and-After Comparisons
The instinct after winning an A/B test is to ship the winner to everyone and move on to the next experiment. But if you measure success by comparing metrics before the change to metrics after, you're confounding your experiment results with dozens of other factors. Your marketing team might have shifted budget to higher-quality channels. A competitor might have raised prices. iOS might have released a new version that changed user behavior. Seasonal patterns affect subscription apps dramatically.
A holdout group eliminates this ambiguity by maintaining a concurrent control. Instead of comparing February traffic to January traffic, you compare 95% of February traffic (receiving your winner) to 5% of February traffic (still receiving the original control). Both groups experience the same external conditions—same marketing, same seasonality, same OS versions, same competitor actions. The only systematic difference is the onboarding experience, which isolates the true causal effect of your optimization.
How to Size Your Holdout Group
Holdout size balances two competing concerns: statistical power and opportunity cost. A larger holdout gives you cleaner measurement and faster detection of changes in effectiveness, but it also means more users experiencing the inferior control variant. For most subscription apps, a holdout between 5% and 10% of new users strikes the right balance, providing enough sample size to detect meaningful differences while capturing most of the winner's value.
Your required holdout size depends on your traffic volume and the magnitude of effects you need to measure. High-traffic apps can use smaller holdouts (2-5%) because they accumulate statistical power quickly. Lower-traffic apps need larger holdouts (10-15%) to avoid waiting months between meaningful measurement checks. Calculate the sample size needed to detect a 10% relative difference in your primary metric with 80% power, then allocate that many users to the holdout.
When the Winner Stops Winning
Holdout groups reveal an uncomfortable truth: winning variants often lose their edge over time. The onboarding flow that lifted conversions by 15% in March might show only 8% lift by June and no significant difference by September. This degradation happens because user preferences shift, competitors copy your ideas, the novelty of your approach wears off, or your winner was optimized for a user segment that's no longer dominant in your traffic mix.
Continuous holdout measurement catches this decay before it costs you revenue. If your holdout analysis shows the gap narrowing between winner and control, you know it's time to run a new experiment. Maybe the original control is now the better option, or maybe you need a completely fresh approach. Without the holdout, you'd keep running an outdated onboarding flow, falsely confident that it's still your best performer because it won a test six months ago.
Implementing Sticky Holdout Assignment
The holdout must be sticky—once a user is assigned to holdout or winner, they stay in that group forever, even across app reinstalls and device changes. Sticky assignment preserves the statistical properties of your holdout by preventing users from switching groups based on their behavior. If holdout users could switch to the winner group by reinstalling the app, your holdout would become biased toward users who didn't engage enough to complete onboarding, making your measurements worthless.
Implement stickiness by hashing a persistent user identifier (like the App User ID) to deterministically assign each user to either holdout or winner. This hash-based assignment means the same user always gets the same group, even if your experiment service is temporarily unavailable or the user appears on a new device. Store the assignment server-side as a backup, but the hash function ensures consistency without requiring database lookups for every app launch.
Managing Holdouts Across Multiple Experiments
After running several onboarding experiments, you'll have multiple holdout groups measuring different optimization layers. Your first experiment might have a holdout seeing the original paywall design, while a second experiment has its own holdout seeing the winning paywall but the original trial duration. This layering gets complex quickly, and you need a clear strategy for managing these nested counterfactuals without losing statistical power or user experience consistency.
The cleanest approach is a single persistent holdout that never receives any optimizations, serving as a true baseline for measuring cumulative impact. New experiments run only on the non-holdout traffic, comparing new variants against the current production winner. Spinosis handles this pattern by letting you shift only new traffic toward winning variants while maintaining a fixed holdout group, so you can iterate rapidly without polluting your long-term measurement baseline. This design keeps your holdout statistically clean while still capturing nearly all the value from each winning experiment.
Questions
How long should I keep a holdout group running?
Maintain your holdout indefinitely or until you launch a new onboarding experiment that supersedes the current winner. Many subscription apps run primary holdouts for 6-12 months to measure long-term LTV differences and detect degradation in winner performance. If you're iterating quickly with frequent experiments, you might refresh the holdout quarterly, graduating the old holdout to the control group of your next test. The key is continuity—don't start and stop holdouts arbitrarily.
Does a holdout slow down my iteration speed?
No, because the holdout only affects a small percentage of users while you ship winners to everyone else. You're not waiting for holdout data to launch; you launch based on your initial A/B test results, then use the holdout for ongoing validation. The holdout runs in parallel with your next experiments, providing long-term measurement without blocking near-term decisions. Think of it as insurance that your experiments are actually working, not a gate you need to pass through.
What if the holdout shows my winner is actually worse?
If long-term holdout data contradicts your original A/B test win, trust the holdout and investigate what changed. The original test might have been a false positive, or external factors during the test period might have temporarily favored the winner. Analyze whether specific user segments or cohorts drive the divergence. If the holdout consistently shows no benefit or negative impact, roll back to the control and run a new experiment with fresh hypotheses.
Turn on auto-optimize for one test.
Create a project, install the SDK, connect RevenueCat. Traffic starts shifting on its own.