Experiment Designer
Design, prioritize, and evaluate controlled experiments — both product experiments (features, flows, ML changes) and marketing experiments (landing pages, copy, pricing, CTAs) — with clear hypotheses and defensible decisions.
This skill is the canonical home for A/B-test methodology in this collection. Marketing-specific framing (proactive CRO triggers, ad-copy patterns) is handled below; deeper CRO surface-level work lives in page-cro, signup-flow-cro, and onboarding-cro.
When to use
- A/B and multivariate experiment planning
- Hypothesis writing and success criteria
- Sample size and minimum-detectable-effect (MDE) calculation
- Experiment prioritization (ICE, RICE-style scoring)
- Statistical interpretation of test results for business decisions
- Optimizing signup, onboarding, pricing, landing page, ad copy, or feature changes
Core principles
- Start with a hypothesis — not "let's see what happens". Specific prediction, based on data or reasoning.
- Test one thing — single variable per test; otherwise you cannot isolate cause.
- Statistical rigor — pre-determine sample size, do not peek and stop early, commit to the methodology.
- Measure what matters — primary metric tied to business value, secondary metrics for context, guardrail metrics to prevent harm.
Hypothesis framework
If/Then/Because format (product context)
- If we change
[intervention]
- Then
[metric] will change by [expected direction/magnitude]
- Because
[behavioral mechanism]
Marketing/CRO format
Because [observation/data],
we believe [change]
will cause [expected outcome]
for [audience].
We'll know this is true when [metrics].
Weak: "Changing the button color might increase clicks."
Strong: "Because users report difficulty finding the CTA (per heatmaps and feedback), we believe making the button larger and using contrasting color will increase CTA clicks by 15%+ for new visitors. We'll measure click-through rate from page view to signup start."
Hypothesis quality checklist
Test types
| Type |
Description |
Traffic needed |
| A/B |
Two versions, single change |
Moderate |
| A/B/n |
Multiple variants, single change |
Higher |
| MVT (multivariate) |
Multiple changes in combinations |
Very high |
| Split URL |
Different URLs for variants |
Moderate |
Metric selection
Primary metric
- Single decision metric, directly tied to hypothesis.
- This is what you call the test on.
Secondary metrics
- Diagnostic — explain why/how the change worked.
- Never the basis for go/no-go on their own.
Guardrail metrics
- Things that shouldn't get worse — quality, safety, downstream funnel steps, support tickets, refund rate.
- Stop the test if these go significantly negative.
Example: pricing-page test
- Primary: plan-selection rate
- Secondary: time on page, plan distribution
- Guardrail: support tickets, refund rate
Sample size
Quick reference table
| Baseline |
10% lift |
20% lift |
50% lift |
| 1% |
150k/variant |
39k/variant |
6k/variant |
| 3% |
47k/variant |
12k/variant |
2k/variant |
| 5% |
27k/variant |
7k/variant |
1.2k/variant |
| 10% |
12k/variant |
3k/variant |
550/variant |
Tooling
# Demo mode
python3 scripts/sample_size_calculator.py
# Compute sample size for a 5% baseline targeting 20% relative lift
python3 scripts/sample_size_calculator.py --baseline 0.05 --mde 0.20
# Add daily traffic to estimate test duration
python3 scripts/sample_size_calculator.py --baseline 0.05 --mde 0.20 --daily-traffic 500
# JSON output for automation
python3 scripts/sample_size_calculator.py --baseline 0.05 --mde 0.20 --json
The calculator is 100% stdlib (no scipy / numpy required). For a deeper sample-size guide with edge cases see references/sample-size-guide.md.
External calculators worth knowing:
Prioritization (ICE)
When you have more candidate experiments than capacity:
ICE Score = (Impact × Confidence × Ease) / 10
- Impact: potential upside if it wins (1–10).
- Confidence: evidence quality the hypothesis is right (1–10).
- Ease: cost / speed / complexity to ship the variant (1–10).
Run highest-ICE first.
Traffic allocation
| Approach |
Split |
When to use |
| Standard |
50/50 |
Default for A/B |
| Conservative |
90/10, 80/20 |
Limit risk of a bad variant |
| Ramping |
Start small, increase |
Technical-risk mitigation |
- Keep variant assignment consistent across visits for the same user.
- Ensure exposure is balanced across time of day / week.
Designing variants (marketing context)
What to vary
| Category |
Examples |
| Headlines / copy |
Message angle, value prop, specificity, tone |
| Visual design |
Layout, color, images, hierarchy |
| CTA |
Button copy, size, placement, number |
| Content |
Information included, order, amount, social proof |
Best practices
- Single, meaningful change per test arm.
- Bold enough to detect — too-small differences are statistically invisible.
- True to the hypothesis — the variant is the hypothesis, not random tweaks.
Implementation
Client-side
- JavaScript modifies the page after load.
- Quick to implement; can cause flicker.
- Tools: PostHog, Optimizely, VWO.
Server-side
- Variant determined before render.
- No flicker, requires dev work.
- Tools: PostHog, LaunchDarkly, Split.
Running the test
Pre-launch checklist
During the test
DO: monitor for technical issues, check segment quality, document external factors.
DON'T: peek at results and stop early, change variants mid-test, add traffic from new sources.
The peeking problem
Looking at results before reaching sample size and stopping early inflates false positives. Pre-commit to the sample size and trust the process. If you must look, use sequential analysis with a formal correction (e.g., always-valid p-values).
Analyzing results
Statistical significance
- 95% confidence ⇔ p-value < 0.05.
- Means there's a < 5% chance the result is noise — not a guarantee of truth.
- Statistical significance is not business significance.
Analysis checklist
- Reached sample size? If not, the result is preliminary.
- Statistically significant? Check confidence intervals, not just p-values.
- Effect size meaningful? Compare point estimate to MDE and to business impact.
- Secondary metrics consistent? Do they support the primary?
- Guardrail concerns? Anything got materially worse?
- Segment differences? Mobile vs. desktop, new vs. returning, geo, plan.
Interpreting results
| Result |
Conclusion |
| Significant winner |
Implement variant |
| Significant loser |
Keep control, learn why |
| No significant difference |
Need more traffic or a bolder test |
| Mixed signals |
Dig deeper, segment, possibly re-run |
Statistical interpretation guardrails
- p-value < α → evidence against the null, not guaranteed truth.
- Confidence interval crossing zero → uncertain directional claim.
- Wide intervals → low precision even when significant.
- Use practical significance thresholds tied to business impact.
Common pitfalls
Test design
- Underpowered tests → false negatives; the variant might have worked but you can't tell.
- Testing too many things at once → can't isolate cause.
- No clear hypothesis → no learning even if the variant wins.
Execution
- Stopping early on random spikes.
- Changing things mid-test (tracking, copy, eligibility).
- Sample-ratio mismatch and instrumentation drift.
- Running too many simultaneous tests on overlapping audiences without isolation.
Analysis
- Declaring success from p-value without effect-size context.
- Cherry-picking segments after the fact.
- Over-interpreting inconclusive results.
- Ignoring novelty effects on early data.
Documentation
Document every test:
- Hypothesis
- Variants (with screenshots)
- Results (sample, metrics, significance, CI)
- Decision and learnings — even if the variant lost.
Templates: references/test-templates.md.
Output artifacts
| Artifact |
Format |
Description |
| Experiment brief |
Markdown |
Hypothesis, variants, metrics, sample size, duration, owner |
| Sample-size input |
Table |
Baseline rate, MDE, confidence, power |
| Pre-launch QA checklist |
Checklist |
Implementation, tracking, variant rendering verification |
| Results report |
Markdown |
Statistical significance, effect size, segment breakdown, decision |
| Test backlog |
Prioritized list |
Ranked experiments by ICE / expected impact |
Proactive triggers (marketing context)
Proactively offer A/B test design when:
- Conversion rate mentioned — user shares a conversion rate and asks how to improve it; suggest designing a test rather than guessing.
- Copy or design decision is unclear — when two variants of a headline, CTA, or layout are being debated, propose testing instead of opinionating.
- Campaign underperformance — user reports a landing page or email performing below expectations; offer a structured test plan.
- Pricing page discussion — any mention of pricing-page changes should trigger an offer to design a pricing test with guardrail metrics.
- Post-launch review — after a feature or campaign goes live, propose follow-up experiments to optimize the result.
References
Related skills
page-cro — what to test on a marketing page (use first to generate hypotheses).
signup-flow-cro — signup-specific test patterns.
onboarding-cro — activation/onboarding experiments.
product-discovery — qualitative validation before you have a hypothesis worth testing.
marketing-context — load this for ICP/positioning framing before designing marketing tests.
1---2name: experiment-designer3description: A/B and multivariate experiments — hypothesis, sample size, ICE priority, stats significance4---56# Experiment Designer78Design, prioritize, and evaluate controlled experiments — both **product experiments** (features, flows, ML changes) and **marketing experiments** (landing pages, copy, pricing, CTAs) — with clear hypotheses and defensible decisions.910This skill is the canonical home for A/B-test methodology in this collection. Marketing-specific framing (proactive CRO triggers, ad-copy patterns) is handled below; deeper CRO surface-level work lives in `page-cro`, `signup-flow-cro`, and `onboarding-cro`.1112## When to use1314- A/B and multivariate experiment **planning**15- **Hypothesis** writing and success criteria16- **Sample size** and minimum-detectable-effect (MDE) calculation17- Experiment **prioritization** (ICE, RICE-style scoring)18- **Statistical interpretation** of test results for business decisions19- Optimizing signup, onboarding, pricing, landing page, ad copy, or feature changes2021## Core principles22231. **Start with a hypothesis** — not "let's see what happens". Specific prediction, based on data or reasoning.242. **Test one thing** — single variable per test; otherwise you cannot isolate cause.253. **Statistical rigor** — pre-determine sample size, do not peek and stop early, commit to the methodology.264. **Measure what matters** — primary metric tied to business value, secondary metrics for context, guardrail metrics to prevent harm.2728---2930## Hypothesis framework3132### If/Then/Because format (product context)3334- **If** we change `[intervention]`35- **Then** `[metric]` will change by `[expected direction/magnitude]`36- **Because** `[behavioral mechanism]`3738### Marketing/CRO format3940```41Because [observation/data],42we believe [change]43will cause [expected outcome]44for [audience].45We'll know this is true when [metrics].46```4748**Weak**: "Changing the button color might increase clicks."4950**Strong**: "Because users report difficulty finding the CTA (per heatmaps and feedback), we believe making the button larger and using contrasting color will increase CTA clicks by 15%+ for new visitors. We'll measure click-through rate from page view to signup start."5152### Hypothesis quality checklist5354- [ ] Contains explicit intervention and audience55- [ ] Specifies measurable metric change56- [ ] States plausible causal reason57- [ ] Includes expected minimum effect (MDE)58- [ ] Defines failure condition5960---6162## Test types6364| Type | Description | Traffic needed |65| --- | --- | --- |66| **A/B** | Two versions, single change | Moderate |67| **A/B/n** | Multiple variants, single change | Higher |68| **MVT** (multivariate) | Multiple changes in combinations | Very high |69| **Split URL** | Different URLs for variants | Moderate |7071---7273## Metric selection7475### Primary metric7677- Single decision metric, directly tied to hypothesis.78- This is what you call the test on.7980### Secondary metrics8182- Diagnostic — explain *why/how* the change worked.83- Never the basis for go/no-go on their own.8485### Guardrail metrics8687- Things that **shouldn't get worse** — quality, safety, downstream funnel steps, support tickets, refund rate.88- Stop the test if these go significantly negative.8990### Example: pricing-page test9192- **Primary**: plan-selection rate93- **Secondary**: time on page, plan distribution94- **Guardrail**: support tickets, refund rate9596---9798## Sample size99100### Quick reference table101102| Baseline | 10% lift | 20% lift | 50% lift |103| --- | --- | --- | --- |104| 1% | 150k/variant | 39k/variant | 6k/variant |105| 3% | 47k/variant | 12k/variant | 2k/variant |106| 5% | 27k/variant | 7k/variant | 1.2k/variant |107| 10% | 12k/variant | 3k/variant | 550/variant |108109### Tooling110111```bash112# Demo mode113python3 scripts/sample_size_calculator.py114115# Compute sample size for a 5% baseline targeting 20% relative lift116python3 scripts/sample_size_calculator.py --baseline 0.05 --mde 0.20117118# Add daily traffic to estimate test duration119python3 scripts/sample_size_calculator.py --baseline 0.05 --mde 0.20 --daily-traffic 500120121# JSON output for automation122python3 scripts/sample_size_calculator.py --baseline 0.05 --mde 0.20 --json123```124125The calculator is 100% stdlib (no scipy / numpy required). For a deeper sample-size guide with edge cases see [`references/sample-size-guide.md`](./references/sample-size-guide.md).126127External calculators worth knowing:128129- [Evan Miller's](https://www.evanmiller.org/ab-testing/sample-size.html)130- [Optimizely's](https://www.optimizely.com/sample-size-calculator/)131132---133134## Prioritization (ICE)135136When you have more candidate experiments than capacity:137138```139ICE Score = (Impact × Confidence × Ease) / 10140```141142- **Impact**: potential upside if it wins (1–10).143- **Confidence**: evidence quality the hypothesis is right (1–10).144- **Ease**: cost / speed / complexity to ship the variant (1–10).145146Run highest-ICE first.147148---149150## Traffic allocation151152| Approach | Split | When to use |153| --- | --- | --- |154| **Standard** | 50/50 | Default for A/B |155| **Conservative** | 90/10, 80/20 | Limit risk of a bad variant |156| **Ramping** | Start small, increase | Technical-risk mitigation |157158- Keep variant assignment **consistent** across visits for the same user.159- Ensure exposure is balanced across time of day / week.160161---162163## Designing variants (marketing context)164165### What to vary166167| Category | Examples |168| --- | --- |169| Headlines / copy | Message angle, value prop, specificity, tone |170| Visual design | Layout, color, images, hierarchy |171| CTA | Button copy, size, placement, number |172| Content | Information included, order, amount, social proof |173174### Best practices175176- **Single, meaningful change** per test arm.177- **Bold enough** to detect — too-small differences are statistically invisible.178- **True to the hypothesis** — the variant is the hypothesis, not random tweaks.179180---181182## Implementation183184### Client-side185186- JavaScript modifies the page after load.187- Quick to implement; can cause flicker.188- Tools: PostHog, Optimizely, VWO.189190### Server-side191192- Variant determined before render.193- No flicker, requires dev work.194- Tools: PostHog, LaunchDarkly, Split.195196---197198## Running the test199200### Pre-launch checklist201202- [ ] Hypothesis documented203- [ ] Primary, secondary, guardrail metrics defined204- [ ] Sample size calculated; duration committed205- [ ] Variants implemented correctly206- [ ] Tracking verified end-to-end207- [ ] QA completed on all variants208209### During the test210211**DO**: monitor for technical issues, check segment quality, document external factors.212213**DON'T**: peek at results and stop early, change variants mid-test, add traffic from new sources.214215### The peeking problem216217Looking at results before reaching sample size and stopping early **inflates false positives**. Pre-commit to the sample size and trust the process. If you must look, use sequential analysis with a formal correction (e.g., always-valid p-values).218219---220221## Analyzing results222223### Statistical significance224225- 95% confidence ⇔ p-value < 0.05.226- Means there's a < 5% chance the result is noise — **not** a guarantee of truth.227- Statistical significance is **not** business significance.228229### Analysis checklist2302311. Reached sample size? If not, the result is preliminary.2322. Statistically significant? Check confidence intervals, not just p-values.2333. Effect size meaningful? Compare point estimate to MDE and to business impact.2344. Secondary metrics consistent? Do they support the primary?2355. Guardrail concerns? Anything got materially worse?2366. Segment differences? Mobile vs. desktop, new vs. returning, geo, plan.237238### Interpreting results239240| Result | Conclusion |241| --- | --- |242| Significant winner | Implement variant |243| Significant loser | Keep control, learn why |244| No significant difference | Need more traffic or a bolder test |245| Mixed signals | Dig deeper, segment, possibly re-run |246247### Statistical interpretation guardrails248249- p-value < α → evidence against the null, not guaranteed truth.250- Confidence interval crossing zero → uncertain directional claim.251- Wide intervals → low precision even when significant.252- Use **practical significance** thresholds tied to business impact.253254---255256## Common pitfalls257258### Test design259260- Underpowered tests → false negatives; the variant might have worked but you can't tell.261- Testing too many things at once → can't isolate cause.262- No clear hypothesis → no learning even if the variant wins.263264### Execution265266- Stopping early on random spikes.267- Changing things mid-test (tracking, copy, eligibility).268- Sample-ratio mismatch and instrumentation drift.269- Running too many simultaneous tests on overlapping audiences without isolation.270271### Analysis272273- Declaring success from p-value without effect-size context.274- Cherry-picking segments after the fact.275- Over-interpreting inconclusive results.276- Ignoring novelty effects on early data.277278---279280## Documentation281282Document every test:283284- Hypothesis285- Variants (with screenshots)286- Results (sample, metrics, significance, CI)287- **Decision and learnings** — even if the variant lost.288289Templates: [`references/test-templates.md`](./references/test-templates.md).290291---292293## Output artifacts294295| Artifact | Format | Description |296| --- | --- | --- |297| **Experiment brief** | Markdown | Hypothesis, variants, metrics, sample size, duration, owner |298| **Sample-size input** | Table | Baseline rate, MDE, confidence, power |299| **Pre-launch QA checklist** | Checklist | Implementation, tracking, variant rendering verification |300| **Results report** | Markdown | Statistical significance, effect size, segment breakdown, decision |301| **Test backlog** | Prioritized list | Ranked experiments by ICE / expected impact |302303---304305## Proactive triggers (marketing context)306307Proactively offer A/B test design when:3083091. **Conversion rate mentioned** — user shares a conversion rate and asks how to improve it; suggest designing a test rather than guessing.3102. **Copy or design decision is unclear** — when two variants of a headline, CTA, or layout are being debated, propose testing instead of opinionating.3113. **Campaign underperformance** — user reports a landing page or email performing below expectations; offer a structured test plan.3124. **Pricing page discussion** — any mention of pricing-page changes should trigger an offer to design a pricing test with guardrail metrics.3135. **Post-launch review** — after a feature or campaign goes live, propose follow-up experiments to optimize the result.314315---316317## References318319- [`references/experiment-playbook.md`](./references/experiment-playbook.md) — end-to-end experiment workflow.320- [`references/statistics-reference.md`](./references/statistics-reference.md) — significance, power, MDE, p-value pitfalls.321- [`references/sample-size-guide.md`](./references/sample-size-guide.md) — extended sample-size tables and duration calculations.322- [`references/test-templates.md`](./references/test-templates.md) — Markdown templates for briefs, QA, and results reports.323324## Related skills325326- [`page-cro`](https://github.com/mouadja02/skills/tree/main/skills/marketing-and-growth/page-cro) — *what* to test on a marketing page (use first to generate hypotheses).327- [`signup-flow-cro`](https://github.com/mouadja02/skills/tree/main/skills/marketing-and-growth/signup-flow-cro) — signup-specific test patterns.328- [`onboarding-cro`](https://github.com/mouadja02/skills/tree/main/skills/marketing-and-growth/onboarding-cro) — activation/onboarding experiments.329- [`product-discovery`](https://github.com/mouadja02/skills/tree/main/skills/product-management/product-discovery) — qualitative validation *before* you have a hypothesis worth testing.330- [`marketing-context`](https://github.com/mouadja02/skills/tree/main/skills/marketing-and-growth/marketing-context) — load this for ICP/positioning framing before designing marketing tests.