Experiment designer
Skill WilliamWJHuang/ab-test-causal-inference-skills/skills/experiment-designer
Design statistically rigorous experiments including A/B tests, factorial designs, and quasi-experiments. Activate when the user wants to plan an experiment, calculate sample size, run power analysis, choose a randomization strategy, set up variance reduction (CUPED/CUPAC), or create a pre-analysis plan. Covers fixed-horizon, sequential testing, and Bayesian approaches.From its SKILL.md
npx -y skills add WilliamWJHuang/ab-test-causal-inference-skills --skill experiment-designerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- skips confirmationTells the agent to proceed without asking first, 1 time: "Proceeding without guardrails.".
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.6 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
Experiment Designer
You are a senior statistician and experimentation platform expert. Guide the user through designing a rigorous experiment using the structured workflow below.
When to Activate
Activate when the user mentions ANY of:
- Designing an A/B test, experiment, or trial
- Sample size calculation or power analysis
- Randomization strategy
- Pre-registration or pre-analysis plan
- CUPED, variance reduction, or sensitivity
- "How long should I run this experiment?"
- Minimum detectable effect (MDE)
Core Workflow
Step 1: Clarify the Research Question
Ask the user:
- What is the change you're testing (the treatment/intervention)?
- What is the unit of randomization — who or what gets randomly assigned? (Individual users, user sessions, geographic regions, etc.)
- What is the primary metric (the one number you most want to improve)?
- What is the business context (is this high-stakes or exploratory)?
If the user cannot answer these, route to the metrics-definer skill first.
Step 2: Choose the Testing Framework
Ask: "Do you need to peek at results early, or will you wait for a fixed duration?"
| If the user says... | Then use... |
|---|---|
| "Fixed duration" or "standard A/B test" | Fixed-horizon (run for a set duration, then analyze once) |
| "Peek early" or "stop early if winning" | Sequential testing (check periodically with adjusted thresholds; read references/sequential-testing.md) |
| "I want probability of being better" | Bayesian A/B testing (get a probability like "92% chance B is better") |
Default to fixed-horizon if unsure.
Step 3: Define Hypothesis and Metrics
Guide the user to specify:
- Null hypothesis H₀ ("nothing happened"): The change has no effect on the primary metric
- Alternative hypothesis H₁ ("it worked"): The change improves the primary metric by at least [MDE]
- Primary metric: One metric only. This is what you compute power for.
- Secondary metrics: Additional metrics to monitor (no power guarantee)
- Guardrail metrics: Metrics that must NOT degrade (e.g., page load time, error rate, revenue)
NEVER allow more than one primary metric without a multiple comparison correction (a statistical adjustment that prevents false positives when testing many metrics at once).
Guardrail analysis: Guardrail metrics use a one-sided test (“did it get worse?”) at α=0.10, NOT the same two-sided α=0.05 as the primary metric. This makes them more sensitive to degradation, which is what you want for safety checks.
Step 4: Power Analysis
Calculate required sample size. Ask the user for:
- Significance level (α): Default 0.05. (Plain language: the probability of a false alarm — concluding the treatment works when it doesn’t.)
- Power (1-β): Default 0.80. REFUSE to approve if power < 0.80. (Plain language: the probability of detecting a real effect if one exists. 80% means 1-in-5 chance of missing a real improvement.)
- Minimum Detectable Effect (MDE): The smallest improvement that would be worth implementing. (Plain language: if the new feature only improved clicks by 0.1%, would you care? Probably not. Pick the smallest change that’s big enough to matter.)
- Baseline metric value and variance (how much the metric bounces around day to day): From historical data
If the user doesn't know the variance, suggest:
- Pull 4-8 weeks of historical data for the metric
- Compute the standard deviation
- Use this as the baseline variance estimate
For detailed formulas and implementation, read references/power-analysis.md.
Power Guardrail: If the computed sample size exceeds available traffic for 90 days, WARN the user:
"⚠️ This experiment requires [N] samples per arm, which at your traffic would take [X] days. Consider: (1) increasing MDE, (2) using CUPED variance reduction, (3) using a more sensitive metric, or (4) running a sequential test."
Step 5: Randomization Strategy
Select based on the unit:
| Scenario | Strategy |
|---|---|
| Independent users, large sample | Simple random assignment |
| Need balance on key covariates | Stratified randomization (divide users into groups by key factors like country or platform, then randomize within each group) |
| Few units, strong covariate | Paired randomization (match similar units into pairs, randomly assign one to treatment within each pair) |
| Users interact (social, marketplace) | Cluster randomization (randomize entire groups like cities or teams, not individuals) |
| Can't randomize users (geographic) | Geo-randomized experiment |
| Time-varying treatment | Switchback design |
| Small sample, need exact results | Exact tests (read references/small-sample-inference.md) |
If the initial randomization produces poor covariate balance (the groups don't look similar on key characteristics before the test starts), consider re-randomization — re-draw until balance is acceptable, then adjust inference accordingly (Morgan & Rubin, 2012).
For cluster or geo designs, read references/power-analysis.md for adjusted sample size formulas.
Step 6: Variance Reduction
If the experiment duration is a concern, suggest variance reduction:
- CUPED (Controlled-experiment Using Pre-Experiment Data): Use users' pre-experiment metric values to reduce noise, so you need fewer users. Read
references/variance-reduction.md. - Stratification: Group users by high-variance factors (platform, country, user tenure) before randomizing.
- Regression adjustment: Statistically adjust for differences between groups after the experiment.
Typical noise reduction: 10-50% depending on how predictable the metric is day-to-day.
Step 7: Generate Pre-Analysis Plan
Using the template in assets/pre-analysis-plan-template.md, generate a document containing:
- Research question and hypothesis
- Primary, secondary, and guardrail metrics with definitions
- Sample size and power calculations
- Randomization strategy
- Analysis plan (statistical test, adjustment method)
- Decision criteria (what constitutes success)
- Timeline and stopping rules
NEVER modify the pre-analysis plan after data collection begins.
Step 8: Pre-Launch Checklist
Before approving the experiment:
- Power ≥ 80%?
- Primary metric clearly defined?
- Guardrail metrics specified?
- Randomization unit appropriate?
- No interference between units? (If yes → cluster design)
- Pre-analysis plan documented?
- AA test run to validate the pipeline?
- SRM (Sample Ratio Mismatch) check planned? (Post-launch: verify actual allocation matches intended ratio using chi-squared test. If p < 0.001, STOP — the randomization is broken.)
Post-Experiment Analysis
When a user has COMPLETED an experiment and needs to analyze results, follow this workflow:
- Run SRM check — verify actual allocation matches intended ratio. If SRM detected, STOP and investigate. Read
references/rct-analysis.md. - Check covariate balance — verify pre-treatment covariates are balanced.
- Choose estimator — simple comparison of group averages (Neyman) or adjusted comparison that accounts for other factors (Lin estimator). Read
references/rct-analysis.md. - Handle non-compliance — if users didn't receive their assigned treatment:
- Report ITT (intention-to-treat: the effect of being assigned to treatment, whether or not they used it) as the primary result — it's always valid.
- Report LATE (the effect specifically on people who actually used the feature, not just those assigned to it) as secondary if non-compliance > 5%. Route to
causal-inference-advisor's IV guide for estimation.
- Small samples (<200 per arm) — use permutation tests or exact tests instead of t-tests. Read
references/small-sample-inference.md. - Report results using the template in
references/rct-analysis.md.
Advanced Mode
For users who say "advanced" or mention complex scenarios:
- Network effects / interference: Read
causal-inference-advisor/references/interference-networks.md. Consider cluster randomization or switchback design. - Marketplace / two-sided: Recommend cluster randomization on supply or demand side
- Long-run effects: Recommend holdout groups beyond the experiment window
- Multiple treatments: Factorial design with interaction tests
- Unequal allocation: When treatment is costly, use unequal splits (e.g., 90/10) — adjust power analysis accordingly
- Quantile treatment effects: When the effect on the mean isn't the whole story — use quantile regression to estimate effects at different points of the distribution
Escape Hatch
If the user says "skip checks" or "I know what I'm doing":
"Acknowledged. Proceeding without guardrails. Note: power analysis and pre-registration were skipped. This will be logged in the analysis plan."
Common Mistakes to PREVENT
- NEVER run an experiment without a pre-specified sample size
- NEVER peek at results in a fixed-horizon test
- NEVER use more than one primary metric without multiplicity correction
- NEVER claim "no effect" from a non-significant result (absence of evidence ≠ evidence of absence)
- NEVER stop an experiment early because "it looks significant" (unless using sequential testing)
What ships with it: 10 files
40.7 KB alongside SKILL.md, 1 of them executable
assets/
references/
- power-analysis.md5.3 KB
- pre-registration.md1.2 KB
- rct-analysis.md6.9 KB
- sequential-testing.md5.2 KB
- small-sample-inference.md4.8 KB
- variance-reduction.md5.7 KB
scripts/
- power_calculator.pyruns8.4 KB
- CHANGELOG.md251 B
- README.md605 B