configuring-experiment-rollout
Configures the rollout shape of a PostHog experiment — the variant split (50/50, 80/20, A/B/C ratios), the overall rollout percentage that gates how many users enter the experiment, and the disambiguation when a percentage like "roll out to 25%" could mean either. Use when the user mentions a rollout percentage, variant split, or traffic distribution; gives a ratio like 60/40, 70/30, or 80/20; asks "who sees the test variant?"; wants to increase, decrease, or change the rollout or split on a draft or running experiment; weighs equal vs uneven splits; or proposes a mid-experiment split change (often an anti-pattern that needs reset or end-and-restart).
What this skill does
# Configuring experiment rollout
This skill answers: **Who sees what variant?**
## Recommended approach: equal split + adjust rollout percentage
In most cases, experiments work best with an equal split. If you want to limit exposure to the test variant, adjust the rollout percentage instead.
Why equal splits are better:
- Equal splits maximize statistical power — each variant has the same sample size
- Equal splits balance traffic and thus reach significance faster
- Increasing user exposure throughout the experiment through increasing rollout is clean (changing split mid-experiment can cause users to switch variants, which is bad for user experience and data quality)
Always default to an equal split unless the user explicitly requests otherwise.
## When an uneven split is required
Uneven splits combined with the default "Exclude multivariate users" handling can introduce bias.
If the experiment observes multi-variant users (users exposed to more than one variant) then those are
dropped asymmetrically — the smaller variant loses a larger fraction of its assignments. If those users
behave differently from the rest, the smaller variant's metrics will be skewed.
The right mitigation depends on experiment state:
1. **Pre-launch, or live but with few exposures so far — use an equal split and reduce the overall
rollout.** Achieves the same test-variant exposure without the bias and preserves statistical
power. See the disambiguation question below.
2. **Live experiment with significant exposures — switch multivariate handling to "First seen
variant".** Changing the split mid-run reassigns users across variants (anti-pattern; see
"Changing rollout on a running experiment" below). Switching handling instead keeps everyone in
their original variant and avoids the asymmetric exclusion. See `configuring-experiment-analytics`
for how to set this. Note that "first seen" handling can introduce other biases, but it's
preferable to mid-run reassignment.
## The two rollout controls
There are two separate controls that determine who sees what. Both are set via `parameters`.
### 1. Variant split (`parameters.feature_flag_variants`)
How users **inside** the experiment are distributed across variants.
- Array of `{key, name, split_percent}` — percentages must sum to 100
- First variant must have key `"control"` — this is the baseline
- Minimum 2 variants, maximum 20
- Default: control 50% / test 50%
If the user says "A/B/C test", map the baseline to `"control"` and create additional variants for the others.
### 2. Overall rollout (`parameters.rollout_percentage`)
What percentage of **all** users enter the experiment at all. Default: 100%.
Users not included are excluded entirely — they don't see any variant and are **not part of the analysis**.
### How they interact
These two controls multiply:
| Overall rollout | Variant split | % seeing test | % in analysis |
| --------------- | ------------------ | ------------- | ------------- |
| 100% | 50/50 | 50% | 100% |
| 100% | 75/25 control/test | 25% | 100% |
| 50% | 50/50 | 25% | 50% |
| 25% | 50/50 | 12.5% | 25% |
## The disambiguation question
**CRITICAL**: If the user requests an uneven variant split (e.g. "60/40", "70/20/10") or mentions a
specific percentage that could refer to either the split or the rollout (e.g. "roll out to 25%"), you
MUST clarify before proceeding. This covers two cases:
### Case 1: Single percentage ("25%", "roll out to 40%")
The percentage is ambiguous — it could mean a variant split or a rollout change. Ask:
> There are two ways to get 25% of users seeing the test variant:
>
> 1. **Reduced rollout with equal split** (recommended): reduce the overall rollout and split
> variants equally. Only a subset of users enter the experiment, and of those, each variant
> gets the same share.
> Equal splits maximize statistical power and avoid bias.
> 2. **Asymmetric split**: keep 100% rollout but give the test variant only 25%.
> All users enter the experiment, but the uneven split reduces power on the smaller variant
> and risks bias.
>
> Which approach do you prefer?
Adjust the numbers to match whatever percentage the user requested.
### Case 2: Uneven ratio ("60/40", "70/30", "80/20", etc.)
The ratio looks like an explicit variant split, but a reduced rollout with an equal split is almost
always better. Explain the trade-off and recommend the alternative:
> An uneven variant split works, but an equal split with reduced rollout is recommended:
>
> 1. **Equal split + reduced rollout** (recommended): reduce the overall rollout so that the same
> fraction of users sees the test variant, but split variants equally within the experiment.
> Equal splits maximize statistical power and avoid bias from asymmetric multivariate exclusion.
> 2. **Uneven split**.
> Achieves the same user-facing outcome, but reduces power on the smaller variant and risks bias.
>
> Would you like the equal split approach, or do you have a specific reason for the uneven split?
Adjust the numbers to match the ratio. For experiments with more than two variants, "equal" means
each variant gets the same share (e.g. 34/33/33 for three variants). If the user confirms they want
the uneven split after seeing the trade-off, proceed — but DO NOT skip the next section.
### After the user picks the uneven split
If the user proceeds with an uneven split (option 2 in either case above), you MUST surface the
multivariate-handling implication BEFORE creating or updating the experiment. The user has chosen
the riskier rollout path and needs to make an informed choice about how to mitigate.
Ask:
> One more thing — with an uneven split, the default "Exclude multivariate users" handling drops
> users exposed to multiple variants asymmetrically. The smaller variant loses a larger fraction of
> its assignments, which can skew its metrics if those users behave differently from the rest.
>
> Two options:
>
> 1. **Switch multivariate handling to "First seen variant"** (recommended for uneven splits) —
> keeps all users in the analysis and avoids asymmetric exclusion. Has its own caveats (other
> biases can creep in) but is preferable to the default for uneven splits.
> 2. **Keep the default "Exclude" handling** and accept the bias risk.
>
> Which would you like?
See `configuring-experiment-analytics` for how to set the multivariate handling. Apply the choice
as part of the same operation (creation or update) — do not leave the user with an uneven split
under default handling without an explicit, informed decision.
## Persist flag across authentication steps
This option (`ensure_experience_continuity` on the feature flag) is only relevant when:
- The feature flag is shown to **both** logged-out AND logged-in users
- You need the same variant assignment before and after login
This is not compatible with all setups. Learn more: https://posthog.com/docs/feature-flags/creating-feature-flags#persisting-feature-flags-across-authentication-steps
Only mention this to the user if their use case involves pre/post-authentication experiences.
## Resolving experiments
Rollout changes require an experiment ID. If the user refers to an experiment by name
or description (e.g. "change rollout on my signup test"), load the `finding-experiments`
skill to resolve it to a concrete ID before proceeding.
## Changing rollout on a running experiment
**Any change to rollout or variant split on a running experiment affects both user experience and statistical validity.**
You MUST warn the user and get explicit confirmation before making the change.
Do NOT silently apply the change — even if the user asked for it directly.
Present the warning covering both perspectives:
1. **Who sees what variant?** — will users switch variantsRelated in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.