Holdout Assignment: Deterministic Hashing and Cohort Management
Deterministic Assignment
Use hash(user_id + "holdout_v1") mod 100 < 5 for 5% holdout. The salt "holdout_v1" stays constant indefinitely. Unlike experiments, holdout salt never changes - the same users stay in holdout forever.
This differs from experiment assignment where salt changes per experiment. Holdout salt is permanent infrastructure, not per-test configuration.
Cohort Management
New users joining after holdout creation are assigned to holdout or production based on the same hash. This maintains 5% holdout ratio over time. User churn affects both groups equally, maintaining balance.
Independence from Experiments
Holdout assignment must be independent from experiment assignment. Use different salt families. A user in holdout should still be randomly assigned to experiment buckets (but never see the treatment since features are gated on non-holdout status).