TL;DR
For authenticated pages: Use PostHog, Statsig, or LaunchDarkly with user ID-based bucketing. This ensures same user sees same variant across devices and sessions. For marketing site (pre-login), use ExperimentHQ with cookie-based tracking.
Why Authenticated Pages Are Different
Key differences from public pages:
- • User identity known: Can use account ID for bucketing
- • Cross-device consistency: User logs in on phone and laptop
- • Long-term tracking: Can track same user over weeks/months
- • Privacy considerations: More sensitive data
Tool Comparison
| Tool | Approach | Auth Support | Verdict |
|---|---|---|---|
| PostHog | User ID-based | Best for Product | |
| Statsig | User ID-based | Best with Flags | |
| LaunchDarkly | User ID-based | Best Feature Flags | |
| ExperimentHQ | Cookie-based | Best for Marketing |
Key Considerations
User-level consistency
Same user must always see same variant, even across devices
Account-based assignment
Use account ID, not session ID, for bucketing
Cross-device tracking
User logs in on mobile and desktop—should see same variant
Privacy
Ensure user data handling complies with your privacy policy
Implementation Pattern
// Pass user ID to A/B testing tool
const variant = experimentTool.getVariant({
experimentId: 'onboarding-flow',
userId: currentUser.id, // Use account ID, not session
})
// Render based on variant
if (variant === 'control') {
return <OnboardingV1 />
} else {
return <OnboardingV2 />
}Choose Your Tool
For in-app experiments: PostHog or Statsig with user ID-based bucketing
For pre-login pages: ExperimentHQ with cookie-based tracking