CRO SKILL
Experiment design discipline
Twelve considerations for an experiment that answers the question you asked: four-part hypotheses, MDE and power, duration and novelty, what not to test, segments, interactions, ratio metrics, network effects, peeking, pre-commitment, the three result buckets.
No key, no account needed
Claude CodeClaude.ai (zip upload)Anthropic API
npx skills add addition-labs/skills --skill experiment-design
Run this in a terminal inside your project folder. Claude Code, Cursor and Codex then read the skill from where it lands.
- Step 01Open a terminal in your project folder
- Step 02Paste the command and press Enter
- Step 03Pick the agents to install to
- Step 04Ask the agent for the job; it reads the skill
experiment-designaddition-labs/skillsMIT licencecommit a67dd34updated 2026-09-07
The most rigorous testing skill on the shelf and the longest, 4,740 words. Its hypothesis has four parts (cause, effect, magnitude, mechanism), its falsifiability test is "write down what would make you not ship", and its default posture on an inconclusive result is do not ship.
It carries the sections the general A/B skills skip: the delta method for ratio metrics like revenue per user, interference in two-sided markets, sequential testing that lets you peek without inflating alpha, and a p-hacking inventory (extra segments, dropped outliers, switched metrics, extended duration, reframed hypotheses).
Seven reference files carry the templates and tables: hypothesis templates, pre-computed sample sizes, a readiness checklist, a results checklist, a decision framework, a platform comparison and fifteen failure patterns.
When to use it
The phrases that trigger it
Say any of these and an agent that has the skill installed will usually load it; you can also call it by name. The phrases are the skill’s own, from its description.
- design an experiment
- A/B test
- multivariate test
- holdout
- sample size
- minimum detectable effect
- test duration
- guardrail metric
- no peeking
- is this worth testing
What’s inside
The playbook, section by section
Hypothesis discipline
A worked bad hypothesis and its good rewrite: tier replacement raises signup-to-paid from 12% to 13% by reducing decision friction. One primary metric, three to five guardrails.
Sample size and MDE
Sample grows with the inverse square of the effect; if the MDE at your traffic exceeds about 5 points absolute, pick a bolder change or do not test.
Duration
The longer of the sample-size hit and one full weekly cycle; two weeks minimum for UI changes; four to six weeks maximum before the world changes around the test.
What not to test
Bug fixes, legally required changes, brand-philosophy questions, decisions already made, designs whose randomisation cannot be clean.
Peeking and sequential testing
Daily peeking on a 28-day test can push the false-positive rate past 30%; mSPRT and group sequential methods fix it; otherwise pre-register the analysis date.
Reading results
Clear win, clear loss, inconclusive; four ranked paths out of inconclusive; a positive primary with an ambiguous guardrail defaults to not shipping.
Reference files the agent loads on demand
7 files in the skill folder, read only when an instruction calls for one.
hypothesis-templates.md- Hypothesis formats that pass the cause, effect, magnitude and mechanism test, with worked examples.
sample-size-tables.md- Pre-calculated sample sizes for the common scenarios, with the maths behind them.
common-failures.md- Anti-patterns that produce confidently wrong shipping decisions: symptom, cause, fix, prevention.
results-interpretation-checklist.md- A step-by-step checklist for reading results and reaching a defensible decision.
platform-comparison.md- Choosing an experimentation platform: statistical defaults, audience, integration model, pricing shape.
pre-experiment-readiness-checklist.md- A go or no-go checklist to run before launching any experiment.
post-experiment-decision-framework.md- What to do when a test ends: ship, iterate or stop, in order.
See it in action
One real run, in full
The request on the left went to the skill as installed. On the right is everything it returned, unedited; scroll inside the box to read it all.
We believe replacing the two-button hero on our service pages (Book a call + Ask for an audit) with a single 'Book a call' button will raise enquiries. We do not have traffic numbers yet (analytics goes live this month). Write the hypothesis in your four-part form, say what traffic it would take to test it at a sensible MDE, and whether it belongs on your 'what NOT to A/B test' list.
Experiment design: single "Book a call" hero vs two-button hero on service pages
Status: design drafted, sizing blocked on data. Analytics is not live yet, so there is no baseline enquiry rate and no exposure count. Everything below that depends on those two numbers is stated as a gap or as a conditional read of the sample-size tables, not as an estimate. Per this skill, a stated gap is a complete answer; a guessed baseline is not.
1. Hypothesis (cause, effect, magnitude, mechanism)
Written to Template 1 (conversion rate change). Slots you cannot fill yet are left in brackets on purpose.
> Replacing the two-button service-page hero (Book a call + Ask for an audit) with a single "Book a call" button will increase service-page-visitor-to-enquiry conversion by [magnitude, relative and absolute] (currently [baseline rate, unknown until analytics reports it], target [baseline plus MDE]) by removing the choice between two competing asks at the moment of highest intent, so visitors who would otherwise hesitate between "call" and "audit" take the one action available.
What each part is, and where it stands:
| Part | Content | Status |
|---|---|---|
| Cause | Two-CTA hero replaced by one-CTA hero, on service pages only | Defined |
| Effect | Enquiry conversion: unique service-page visitors who submit any enquiry (call booking or audit request in control; call booking in treatment) within a fixed window | Defined in shape; window not yet chosen (see gap 3) |
| Magnitude | Relative lift and the absolute baseline-to-target move | Gap. Cannot be set without the baseline |
| Mechanism | Decision-friction reduction: one ask instead of two | Defined, and falsifiable |
Two things about the metric definition that decide whether this test is honest:
- The primary metric must count enquiries of both kinds, not "Book a call" clicks. The treatment removes the audit path entirely. If the primary metric were "call bookings," the treatment wins by construction (control's audit requesters are simply not counted). The claim you actually made is "will raise enquiries," so the metric is total enquiries per exposed visitor. If the audit path also exists elsewhere (footer, nav, a separate page), decide before launch whether audit requests from those routes count for both arms; they should, and they should be attributed to the service-page exposure.
- The mechanism has a real counter-case. Some visitors are not ready for a call and were only willing to ask for an audit. Removing that option may convert them to nothing rather than to a call. That is exactly what makes the hypothesis falsifiable: if total enquiries fall or stay flat while call bookings rise, the mechanism was wrong and the test says so.
Falsifiability check (required by the skill before launch). Write down what result would make you keep the two-button hero. If the answer is "none, we prefer the single button anyway," do not run this test; ship the single button and skip the theater (see section 4).
Primary metric and guardrails (one primary, three to five guardrails)
- Primary: enquiry rate = unique service-page visitors exposed to the hero who submit an enquiry (any type) within [window]. One row per visitor, binary, so a standard proportions test is acceptable here; if you later switch to a per-session or per-pageview denominator, confirm the platform uses a ratio-aware variance estimator.
- Guardrails (proposed, thresholds to be set by you):
- Qualified-enquiry rate (enquiries that pass whatever your first screen is). Guards against "more calls booked, worse calls."
- Booked-call show rate. A single-CTA hero that produces more bookings that nobody attends is not a win.
- Hero CTA click-through rate, both arms. Diagnostic only; tells you whether the effect is happening at the click or at the form.
- Service-page bounce rate or scroll depth. Guards against the hero reading as pushier and losing the browse-first visitor.
- Page load and error rate on the hero variant (standard).
Note on guardrail 1 and 2: you will not have a baseline for these either until analytics and the booking tool are wired together. If they cannot be measured by launch, say so in the pre-commitment rather than listing them and never reading them.
2. What traffic it would take
What is known, and what is not
- Baseline enquiry rate: unknown (analytics goes live this month).
- Weekly exposures to the service-page hero: unknown. Note the skill's warning: count exposure (visitors who actually render the hero on a service page), not site-wide sessions.
- Therefore no single sample-size figure can be given yet. What follows is the skill's own Table 1 plus a computed extension, read conditionally on the baseline you will observe.
Sample-size reference (two-sided, alpha 0.05, power 0.80, 50/50 split, totals across both arms)
From the skill's Table 1 (absolute MDE):
| Baseline | MDE 1% abs | MDE 2% abs | MDE 5% abs |
|---|---|---|---|
| 5% | 14,800 | 4,400 | 1,000 |
| 10% | 31,400 | 8,400 | 1,700 |
Service-page enquiry rates on agency sites are often below the table's lowest row, and at low baselines an absolute MDE stops being a sensible way to state the target (a 1 percent absolute lift on a 2 percent baseline is a 50 percent relative lift). So here is the same math for lower baselines, stated as relative MDE. These are computed with the standard two-proportion formula under the same assumptions as the skill's table (rounded to the nearest hundred; the skill's own table is described as approximate and my recomputation of its cells lands within roughly 10 to 15 percent of the printed figures):
| Baseline | +20% relative | +30% relative | +50% relative |
|---|---|---|---|
| 1% | 85,400 | 39,700 | 15,500 |
| 2% | 42,200 | 19,600 | 7,700 |
| 3% | 27,800 | 12,900 | 5,000 |
| 5% | 16,300 | 7,600 | 2,900 |
How to turn this into a go/no-go once the numbers exist
- After analytics has run for at least two full weekly cycles, read: (a) the service-page enquiry rate, (b) weekly unique service-page hero exposures.
- Pick the MDE you would actually ship for. The skill's guidance: a change that only plausibly moves the metric by a small amount is either not worth a test or not bold enough. Removing one of two CTAs is a bold, visible change, so a +20 to +30 percent relative lift is a reasonable band to be powered for; if you would ship for less than that, the required sample grows fast (inverse square of the effect).
- Duration = the longer of (required total ÷ weekly exposures) and 14 days, because this is a UI change and the skill sets a 14-day floor for novelty and primacy effects. Hard ceiling six weeks.
- Worked reading of the table, not a prediction: if the observed baseline turns out to be 2 percent and you power for +30 percent relative, you need about 19,600 exposed visitors in total. That is about 1,400 per week over a 14-day run, or roughly 3,300 per week over six weeks. If weekly service-page exposures are below that, the test cannot answer the question at that MDE; see section 4.
Things that will bias the read on this specific surface
- Weekly cycle. B2B enquiry behaviour differs weekday to weekend; never analyse a partial week.
- Acquisition mix. If paid campaigns start, stop, or change targeting mid-test, the visitor mix changes. Coordinate the test window with whoever runs ads, or pre-register acquisition source as a stratification variable.
- Conversion window. Enquiries on agency sites can lag the first visit by days. Fix the window (for example 7 days from first exposure) before launch and make sure the last cohort has a full window before the analysis date.
- Peeking. If your analytics or testing tool does not do sequential testing, set the analysis date now and do not act on interim reads.
3. Duration and running rules (pre-commitment skeleton)
Fill this in and save it somewhere with a timestamp before the test starts. Blank slots are blank because the data does not exist yet.
- Primary metric: enquiry rate as defined in section 1, window = [ ] days.
- Baseline: [ ] (from analytics, measured over [dates]).
- MDE powered for: [ ] relative ( [ ] absolute ).
- Required total sample: [ ] (from the tables above or your platform's calculator).
- Expected weekly exposures: [ ].
- Duration: [ ] calendar days, not less than 14, not more than 42. Analysis date: [ ].
- Segments: recommend none for the first run. If you must, pre-register at most one (new vs returning visitor, or paid vs organic), and only if the segment alone would hit the sample above.
- Concurrent tests on service pages: [none / list]. Mutex if any.
- Decision rule:
- Lift at or above MDE, guardrails clean: ship the single-button hero.
- Total enquiries down, or a guardrail (qualified rate, show rate) breached: keep the two-button hero.
- Inconclusive: default is do not ship. Then choose one of: kill; re-run bolder (for example single CTA plus a stronger supporting line); or run a bigger version once traffic grows.
- Canary: 5 to 10 percent for a few days first, to confirm the treatment renders, both arms fire the enquiry event, and internal traffic is excluded.
4. Does it belong on the "what NOT to A/B test" list?
Checked against each item in the skill's list:
| NOT-list item | Applies? | Reasoning |
|---|---|---|
| UX bug fix | No | The two-button hero is not broken; it is a design choice. |
| Legal or compliance change | No | |
| Strategic or brand-philosophy question | Partly. | Whether you keep offering a free audit as an entry offer is an offer and positioning decision, not a button decision. The test can tell you what removing the audit button does to enquiry volume; it cannot tell you whether an audit-led sales motion is right for the business. Decide the offer question with that context; use this result as one input, not as the verdict. |
| Already decided | Ask yourselves. | If the single button is going in regardless, do not test it. Ship it, watch the enquiry count, and save the engineering time. This is the falsifiability question from section 1. |
| Test design impossible (sample too small, randomization contaminated) | Unknown, possibly yes. | This is the live risk. Service-page hero exposures on an agency site may not reach the totals in section 2 within six weeks. Until analytics reports weekly exposures, nobody can say. If the numbers come back well below the requirement at a sensible MDE, the honest answer is that this belongs on the list for that reason, and the alternatives are: ship and watch with the enquiry event instrumented, or run a short qualitative pass (session recordings, a few user interviews) on what visitors do at the two-button hero. |
Verdict: not on the list by nature; provisionally on the list by traffic until analytics proves otherwise. Do not launch it until (a) you have at least two full weeks of baseline and exposure data, (b) the required sample at your chosen MDE fits inside six weeks of that traffic, and (c) you have written down what result would make you keep the two buttons.
Gaps, stated plainly
- Baseline enquiry rate: not available. Magnitude slot in the hypothesis cannot be filled.
- Weekly service-page hero exposures: not available. No duration or feasibility verdict is possible.
- Enquiry attribution window and the definition of "enquiry" across both CTAs: not specified by you; needed before the metric is real.
- Guardrail baselines (qualified rate, show rate): not available; may need the booking tool joined to analytics.
- Whether a testing platform exists and whether it supports sequential testing: not stated; determines the peeking rule.
Once 1 and 2 exist, the sizing in section 2 resolves to a single number and a single go/no-go.
What this run could not do
It had no baseline enquiry rate, weekly hero exposures, enquiry attribution window, guardrail baselines or testing platform, so those are stated gaps; the hypothesis magnitude is left bracketed and the sizing is given conditionally from the tables.
Method behind it
Where we would differ, and why
Our A/B testing guide applies this discipline to store traffic: the sample-size arithmetic with worked baselines, why peeking is the usual reason a "winner" fails to replicate, and the pre-registration form we use. The skill is the fuller theory; the guide is the store-sized practice.
The sample-size tables are labelled approximate, and they are: recomputing the cells with the standard two-proportion formula at the stated inputs gives figures 5 to 15% off the printed ones, and the table stops at a 5% baseline, above where a B2B enquiry rate usually sits. Use a calculator for your own numbers.
The skill is written for product managers with feature flags. Marketing pages share the statistics and not the tooling; ignore the feature-flagging cross-references.

SKILL.md
The file the agent reads
Written by RampStack and published under the MIT licence. Read the full file (4,740 words) on GitHub, at the commit we reviewed: rampstackco/claude-skills/skills/experiment-design/SKILL.md. The reference files are in the same folder.
Questions
Questions people ask before installing
We have low traffic. What does it tell us?
That the MDE you can detect is large, and that small changes should either ship untested (cheap and reversible) or not ship. It refuses underpowered tests rather than pretending they work.
Is it only for A/B tests?
A/B, multivariate and holdouts; it also covers cluster randomisation and switchbacks for marketplaces where treatment leaks into control.
How does it differ from ab-testing?
ab-testing is the practical programme (ICE, velocity, playbook). experiment-design is the statistical discipline for one test. Use ab-testing to run the programme and this one before any test whose result will decide something expensive.



