SSpinosis

Why Experiment Assignment Should Stay Sticky in Subscription Onboarding

·Experiment design

Experiment assignment must remain sticky, meaning each user sees the same variant every time they open your app, to maintain experience consistency and attribution accuracy. Non-sticky assignment causes users to see different onboarding flows across sessions, creating confusion and corrupting experiment data when conversions are attributed to whichever variant the user happened to see most recently.

In subscription apps, onboarding often spans multiple sessions as users explore features before committing to a trial. A user might see Variant A on day one, return to see Variant B on day three, then convert on day five after seeing Variant C. Without sticky assignment, you cannot determine which experience actually drove the conversion, making your experiment results meaningless and potentially leading to decisions that decrease rather than increase revenue.

What happens when assignment changes between sessions

Non-sticky assignment re-randomizes users each session or page load, causing users to experience fragments of different variants rather than a coherent onboarding flow. A user might see aggressive benefit claims from Variant A on their first session, then encounter conservative messaging from Variant B when they return. This inconsistency confuses users and makes it impossible to evaluate either variant fairly since no user actually experienced the complete treatment.

Attribution becomes arbitrary when assignment fluctuates. If a user sees Variant A three times and Variant B twice before converting, which variant deserves credit? Last-touch attribution credits Variant B if it happened to be shown during the conversion session, even though Variant A had more influence. First-touch credits Variant A despite the user making their final decision after seeing Variant B. Neither approach reflects reality because the user experienced a hybrid that matches neither variant.

How sticky assignment preserves experiment integrity

Sticky assignment ensures each user sees exactly one variant consistently across all sessions and interactions. The first time a user enters the experiment, they're randomly assigned to a variant and that assignment is saved. Every subsequent session retrieves the saved assignment, guaranteeing the user experiences the complete, uncontaminated treatment that variant intended to deliver.

This consistency enables clean attribution because each user's entire journey, including all sessions, interactions, and eventual conversion or churn, can be definitively credited to a single variant. When measuring revenue per exposed user or any other outcome metric, you know precisely which onboarding experience influenced each user's behavior. The experiment measures what you designed rather than random fragments.

Why device-based storage fails for subscription apps

Storing assignment in device storage like local storage or cookies breaks stickiness when users switch devices or reinstall your app. Subscription onboarding frequently spans device changes as users explore your app on one device then convert on another. A user might browse features on their phone during commute, then start a trial on their tablet at home. Device-based storage assigns them to different variants on each device.

App reinstalls clear local storage, forcing re-randomization. Users who uninstall during trial then reinstall before the trial ends see a different variant than they originally experienced. This creates the same attribution corruption as session-based randomization. Any experiment infrastructure relying solely on device storage will produce unreliable results for subscription apps where cross-device usage and reinstalls are common behaviors.

Implementing user-level sticky assignment

Proper sticky assignment requires server-side storage tied to a persistent user identifier that follows users across devices and sessions. The identifier might be an authentication user ID for apps with login, or a generated anonymous ID synced across devices through your backend. When a user first enters an experiment, your system randomly assigns a variant and stores that assignment server-side associated with their user ID.

Every subsequent request includes the user ID, allowing your system to retrieve their existing assignment before rendering the onboarding experience. This architecture works across devices, app reinstalls, and session boundaries. The assignment remains stable until you explicitly end the experiment or reassign users, ensuring every interaction reflects their designated variant consistently.

When and how to shift traffic without breaking stickiness

After identifying a winning variant, you want to shift new users toward the winner while keeping existing assignments sticky to maintain clean ongoing measurement. This requires distinguishing between users already in the experiment and new users entering for the first time. Existing users continue seeing their original assignment; new users are assigned to variants with updated allocation percentages favoring the winner.

Maintaining a holdout group of users on the original variant provides a continued baseline for measuring the winner's long-term impact. Tools like Spinosis handle this by keeping sticky assignments for existing users while directing new traffic primarily to the winning variant and maintaining a small percentage on the control variant. This approach maximizes the benefit of your winning variant while preserving experiment validity and enabling ongoing lift measurement.

Questions

How long should assignment stay sticky for a given user?

Assignment should remain sticky for the entire duration of the experiment and typically beyond. Once you conclude an experiment and roll out the winner, existing users can be migrated to the winning variant, but during active measurement, assignment must never change. For ongoing experiments with holdouts, maintain sticky assignment indefinitely to preserve the control group for long-term lift measurement.

What user identifier should I use for sticky assignment in apps without login?

Generate a random UUID on first app launch and sync it to your backend, storing it associated with the device's vendor identifier or advertising ID. When users reinstall or switch devices, attempt to recover their ID through backend matching using device identifiers. This approach maintains stickiness for most users while accepting that complete device changes without login may result in new assignment, which is acceptable if it affects a small minority.

Can I reassign users who haven't converted after a certain period?

No, reassigning users mid-experiment corrupts your data even if they haven't converted yet. These users experienced Variant A, formed impressions, and chose not to convert under those conditions. Moving them to Variant B means any future conversion reflects a hybrid experience, breaking attribution. If you want to test converting non-converters differently, create a separate experiment specifically for users who passed through the first experiment without converting.

Turn on auto-optimize for one test.

Create a project, install the SDK, connect RevenueCat. Traffic starts shifting on its own.

Related guides