Tasks / Metrics & Experimentation

Experiment specification

Can the model design a test that could actually change the decision?

Task type v1.0 · 2 tasksLast changed 6 Oct 2026 · ChangelogDifficulty

What AI gets right here, and what you’ll still have to catch

From 16 graded outputs by 8 models. 31% were usable with at most a quick edit.

Reliably right

  1. Randomises by user100% pass
    Randomises by logged-in user ID across platforms, explicitly citing cross-platform usage and session non-independence.
    Sonnet 5.5 · API · Show the fee sooner
  2. Works around the calendar94% pass
    Addresses both the payments test and the Black Friday freeze, proposes concurrent independent assignment with an interaction check, and avoids a one-week squeeze.
    Sonnet 5.5 · API · Show the fee sooner
  3. Addresses the actual decision91% pass
    Commits to a clear experiment plan with a decision rule that maps every outcome (ship, don't ship, kill, extend) to an action.
    Sonnet 5.5 · API · Show the fee sooner

Where it slips

  1. Guardrails with thresholds50% pass
    Guardrail metrics are named but lack explicit numeric thresholds; 'materially worse' and 'drops meaningfully' are too vague to block rollout without further definition.
    Sonnet 5.5 · API · Showing the delivery fee up front
  2. Says why a test is worth it here59% pass
    The output does not explain why this decision merits a test given the traffic and stakes, nor does it recommend a cheaper alternative.
    Opus 5.5 · Claude · Show the fee sooner
  3. Uses the supplied evidence correctly64% pass
    Unsupported claims about the traffic data's adequacy and the code freeze's preapproval requirement are presented as facts, not in the brief.
    GPT-6.1 Sol · API · Show the fee sooner

How it’s graded

Each check is built on how world-class product and growth leaders do this work, as they’ve described it on Lenny’s Podcast, and names the leader it comes from.

  1. An unambiguous primary metric

    Does the spec name one primary metric, explain why an increase is unambiguously good for the user and the business, and say how the result's trustworthiness will be checked?

    Passes when One primary metric with a clear rationale for its direction, plus a planned trust check such as a sample ratio check.

  2. Decision rule written before the test

    Does the spec say, before the test runs, which result leads to which action (ship, don't ship, iterate), including what happens if the result is inconclusive?

    Passes when Every outcome, including an inconclusive one, maps to a stated action, with the thresholds that separate them.

  3. Sized from the real traffic

    Is the sample size and duration worked out from the supplied traffic, baseline and smallest effect worth detecting, run in full weekly cycles?

    Passes when Sample size follows from the baseline and the smallest effect worth acting on, the duration follows from the traffic the brief gives (including how units accumulate), and it runs whole weeks.

  4. Guardrails with thresholds

    Does the spec name the guardrail metrics that would stop a rollout even if the primary metric wins, each with a threshold?

    Passes when The guardrails that matter for this change are named, each with a threshold that would block the rollout.

  5. Says why a test is worth it here

    Does the spec weigh whether a test is worth running here: enough traffic to detect an effect that matters, and a decision the result would actually change, and does it say what it would do instead if not?

    Passes when Explains why this decision merits a test given the traffic and stakes, or recommends a cheaper route where they don't.

Plus our standard checks

Uses the supplied evidence correctly · Addresses the actual decision · Respects explicit constraints · Identifies material uncertainty · Avoids unsupported claims · Produces the required deliverable · and 3 written for each task, which you’ll see in the tasks below.

The tasks

Read the brief, then compare up to three outputs, each with the LLM judge’s verdict on every check. Highlights mark what a PM had to fix.

The brief

You're the PM for checkout at Waymark. Write the experiment spec for the idea below, in no more than 900 words: hypothesis, what's randomised and how, metrics (primary, secondary, guardrails), sample size and duration worked out from our real traffic, when it can run given the calendar, and the decision rule. Show your sums.\n\nThe files are attached.

What the model was given5 items: About Waymark, the_idea.md, checkout_traffic_last_8_weeks.csv (daily, by platform), who_checks_out.md, experiment_calendar.md
About WaymarkOnline groceries, ordered on the app or the website, delivered the next day.
the_idea.md3 lines · Download
# The idea (from the checkout squad)

Show the delivery date and the delivery fee on the basket page, before checkout, instead of on the final checkout step. Hypothesis: fewer people abandon at the last step when they see the fee, and more complete checkout. Risk: some people may leave earlier when they see the fee sooner.
checkout_traffic_last_8_weeks.csv (daily, by platform)date,weekday,platform,checkout_sessions,orders 2026-08-10,Mon,app,23970,1755 2026-08-10,Mon,web,16794,894 2026-08-11,Tue,app,23130,1691 2026-08-11,Tue,web,17534,943 2026-08-12,Wed,app,23807,1689 2026-08-12,Wed,web,16732,906 2026-08-13,Thu,app,23420,1673 2026-08-13,Thu,web,16871,900 2026-08-14,Fri,app,23082,1664 2026-08-14,Fri,web,17728,943 2026-08-15,Sat,app,15784,1039 2026-08-15,Sat,web,11893,600 2026-08-16,Sun,app,15784,1045 2026-08-16,Sun,web,11908,594 2026-08-17,Mon,app,23929,1725 2026-08-17,Mon,web,17584,947 2026-08-18,Tue,app,23133,1674 2026-08-18,Tue,web,17005,935 2026-08-19,Wed,app,23486,1661 2026-08-19,Wed,web,16706,912 2026-08-20,Thu,app,23242,1641 2026-08-20,Thu,web,17473,937 2026-08-21,Fri,app,23435,1719 2026-08-21,Fri,web,17242,946 2026-08-22,Sat,app,16371,1080 2026-08-22,Sat,web,12039,601 2026-08-23,Sun,app,16578,1081 2026-08-23,Sun,web,12044,602 2026-08-24,Mon,app,23475,1663 2026-08-24,Mon,web,17130,916 2026-08-25,Tue,app,23409,1669 2026-08-25,Tue,web,17304,918 2026-08-26,Wed,app,23406,1671 2026-08-26,Wed,web,17152,912 2026-08-27,Thu,app,23921,1724 2026-08-27,Thu,web,16846,915 2026-08-28,Fri,app,24224,1712 2026-08-28,Fri,web,17541,963 2026-08-29,Sat,app,16489,1113 2026-08-29,Sat,web,11921,602 2026-08-30,Sun,app,16065,1080 2026-08-30,Sun,web,11484,570 2026-08-31,Mon,app,23827,1748 2026-08-31,Mon,web,17352,951 2026-09-01,Tue,app,24029,1751 2026-09-01,Tue,web,16781,901 2026-09-02,Wed,app,24327,1766 2026-09-02,Wed,web,16949,908 2026-09-03,Thu,app,23853,1723 2026-09-03,Thu,web,17094,914 2026-09-04,Fri,app,24099,1745 2026-09-04,Fri,web,17509,960 2026-09-05,Sat,app,16493,1114 2026-09-05,Sat,web,11610,575 2026-09-06,Sun,app,16571,1109 2026-09-06,Sun,web,11899,598 2026-09-07,Mon,app,23179,1696 2026-09-07,Mon,web,16836,897 2026-09-08,Tue,app,23301,1689 2026-09-08,Tue,web,17187,937 2026-09-09,Wed,app,24344,1745 2026-09-09,Wed,web,17418,953 2026-09-10,Thu,app,23256,1691 2026-09-10,Thu,web,17123,933 2026-09-11,Fri,app,23911,1693 2026-09-11,Fri,web,17576,961 2026-09-12,Sat,app,16328,1099 2026-09-12,Sat,web,12082,609 2026-09-13,Sun,app,15784,1051 2026-09-13,Sun,web,11496,565 2026-09-14,Mon,app,23716,1722 2026-09-14,Mon,web,16886,905 2026-09-15,Tue,app,23295,1649 2026-09-15,Tue,web,17506,947 2026-09-16,Wed,app,23514,1717 2026-09-16,Wed,web,17152,934 2026-09-17,Thu,app,23714,1714 2026-09-17,Thu,web,17027,929 2026-09-18,Fri,app,23324,1698 2026-09-18,Fri,web,17233,942 2026-09-19,Sat,app,15792,1055 2026-09-19,Sat,web,11457,566 2026-09-20,Sun,app,15795,1044 2026-09-20,Sun,web,11932,596 2026-09-21,Mon,app,24102,1717 2026-09-21,Mon,web,17386,951 2026-09-22,Tue,app,24071,1722 2026-09-22,Tue,web,17445,940 2026-09-23,Wed,app,23672,1712 2026-09-23,Wed,web,17595,966 2026-09-24,Thu,app,24378,1759 2026-09-24,Thu,web,16705,911 2026-09-25,Fri,app,23375,1654 2026-09-25,Fri,web,16941,928 2026-09-26,Sat,app,15807,1053 2026-09-26,Sat,web,11924,601 2026-09-27,Sun,app,16572,1100 2026-09-27,Sun,web,11745,581 2026-09-28,Mon,app,23731,1685 2026-09-28,Mon,web,17480,960 2026-09-29,Tue,app,23336,1710 2026-09-29,Tue,web,17187,940 2026-09-30,Wed,app,24441,1745 2026-09-30,Wed,web,16799,913 2026-10-01,Thu,app,23404,1705 2026-10-01,Thu,web,17529,945 2026-10-02,Fri,app,24389,1789 2026-10-02,Fri,web,16952,900 2026-10-03,Sat,app,16669,1110 2026-10-03,Sat,web,12041,604 2026-10-04,Sun,app,15998,1077 2026-10-04,Sun,web,12088,593
who_checks_out.md6 lines · Download
# Who checks out (from the data team)

- 412,000 people placed at least one order in the last 30 days.
- 31% of them used both the app and the website to shop in that month.
- The average buyer starts 3.8 checkout sessions a month.
- Average order value: $64. Repeat purchase within 30 days: 38%.
experiment_calendar.md5 lines · Download
# Experiment calendar

- Payments squad: "Pay later" option on the checkout page, live for 50% of users until 9 November.
- Search squad: new ranking, runs on search results pages only, until 30 October.
- Black Friday promotions start 20 November; code freeze from 16 November.
What a strong answer doesThe answer key the graders mark against

Randomises by user, not session or platform, because 31% of buyers use both app and web and the average buyer starts 3.8 checkout sessions a month; sessions aren't independent. Uses the traffic file: about 41,000 checkout sessions a weekday and 28,000 at weekends (about 260,000 a week), with session conversion about 6.4% (higher on the app), so sizes on users (about 412,000 buyers a month) with a stated baseline and smallest effect worth detecting, and runs in whole weeks. Primary metric: completed orders per user who reaches the basket (not last-step completion, which the change could flatter by moving drop-off earlier). Guardrails: drop-off at the basket page, delivery fee revenue, average order value. Handles the calendar: the payments test runs on the same checkout until 9 November and the code freeze starts 16 November before Black Friday, so either run alongside payments with independent assignment and check for interaction, or start after the freeze lifts and avoid the promotional weeks; it doesn't squeeze a test into the single week between them. A decision rule for win, loss and inconclusive.

Critical failures (cap the score at 40)
  • Randomises by session
Task

Staff-level · v1.0

The outputs

8 setups answered this brief.

Needs more than a quick edit13 of 14 checks passed

The primary metric requires basket session data that is currently missing, and the spec relies on obtaining that data or falling back to a different metric; a PM would need to resolve this before running the experiment.

Output

Experiment spec: delivery date and fee on the basket page

Owner: Checkout PM · Squad: Checkout · Status: Draft for review

1. Hypothesis

Showing the delivery date and delivery fee on the basket page, before checkout, instead of only on the final checkout step, will increase orders per basket session (checkout completion) by at least +0.19 percentage points (about +3% relative, from 6.35% to 6.54%).

Mechanism: shoppers who learn the fee at the final step are surprised by it and leave. Seeing it early removes that surprise.

Counter-risk: some shoppers who would have paid the fee will leave at the basket page instead. The guardrails below test for this.

2. Population, unit and randomisation

  • Population: all signed-in users who reach the basket page on app or web.
  • Unit of randomisation: user, not session. Users average 3.8 checkout sessions a month, and 31% shop on both app and web. Session-level randomisation would show the same person both versions.
  • Method: hash of the cross-platform user ID, salted per experiment, assigned 50% control / 50% treatment. The same assignment applies on app and web.
  • Stratification: check balance by platform. App converts at 7.09% and web at 5.32% (see §4), and app is 57.9% of sessions.
  • Dependency: this needs a cross-platform user ID. If we only have device or cookie IDs, cross-device contamination must be estimated before launch.

3. Metrics

Primary - Orders per basket session = orders ÷ basket sessions. Baseline 6.35%. This captures both early exits (at basket) and late exits (at checkout). Denominator needs confirming with the data team (see §8).

Secondary - Checkout-start rate from basket. - Average order value (baseline $64). - Orders per user over 14 days. - All of the above split by platform and by Pay later exposure (see §5).

Guardrails - Basket exit rate (leaving the basket without starting checkout). Must not rise by more than 0.5 percentage points absolute. This is the main test of the early-leave risk. - AOV must not fall by more than 2% ($1.28). - Delivery-fee contacts (support tickets mentioning fee) per 1,000 orders must not rise by more than 10%. - Order cancellations within 24 hours must not rise.

4. Sample size and duration

Baseline (from `checkouttrafficlast8weeks.csv`, 10 Aug to 4 Oct, 56 days): - Checkout sessions: 2,083,390 (about 260,000 a week, 37,000 a day) - Orders: 132,196 - Conversion: 132,196 ÷ 2,083,390 = 6.35% - Weekly range: 6.31% to 6.39% - App: 85,526 ÷ 1,206,537 = 7.09% (1,206,537 sessions) - Web: 46,670 ÷ 876,853 = 5.32% (876,853 sessions)

Power calculation (two-sided α = 0.05, power 80%, p₁ = 0.0635, p₂ = 0.0655): - Variance sum: 0.0635 × 0.9365 + 0.0655 × 0.9345 = 0.05946 + 0.06121 = 0.12067 - (z₀.₉₇₅ + z₀.₈₀)² = (1.96 + 0.8416)² = 7.849 - n per arm = 7.849 × 0.12067 ÷ (0.0020)² = 0.9472 ÷ 0.000004 = 236,800 sessions - Design effect for repeat sessions per user, assumed 1.2: 236,800 × 1.2 = 284,000 per arm, 568,000 total

Duration: - Traffic per arm: 260,000 ÷ 2 = 130,000 a week. - 284,000 ÷ 130,000 = 2.2 weeks. Two weeks is too short: it does not cover the full weekday cycle and gives no margin. - Run 3 full weeks (21 days). That gives 390,000 sessions per arm, which exceeds the 284,000 needed. Each weekday appears three times.

Sensitivity: detecting +0.10 pp needs 0.9472 ÷ 0.000001 × 1.2 ≈ 1.14M per arm, about 9 weeks. Not feasible, so +0.19 pp is the smallest effect this test can detect.

5. Calendar and overlaps

EventDatesConflict
Search ranking testto 30 OctNone on checkout. Changes search traffic mix only.
Pay later (checkout page, 50% of users)to 9 NovYes. Same page, same funnel.
Code freezefrom 16 NovOur build must be live and tested before this.
Black Fridayfrom 20 NovMust not overlap.

Proposed window: launch Mon 12 Oct, run 21 days, end Sun 1 Nov. Readout by 5 Nov, decision before the 16 Nov freeze.

  • Must start by 26 Oct to finish before 16 Nov, so there is no slack for later starts.
  • Pay later overlap: our test runs alongside Pay later until 9 Nov. Randomise independently (separate salt) so the two effects cross, and analyse the interaction. A 2×2 readout is enough. If Pay later changes how people respond to fees, the interaction term will show it.
  • Search overlap: the search test runs until 30 Oct and changes which products people add to baskets. Monitor basket-value mix in both arms. Not a blocker.

6. Analysis

  • Pre-registered, one readout at day 21. No interim peeking.
  • Two-sided test for the primary metric; report 95% CI.
  • SRM check: expected 50/50 split. Flag if the split is off by more than 0.5% and do not read results until resolved.
  • Cluster-robust SEs by user.
  • Pre-specified subgroups: platform, Pay later exposure. Report only; no decisions on them.

7. Decision rule

OutcomeAction
Primary CI lower bound > 0, point estimate ≥ +0.19 pp, and no guardrail breachedShip to 100% before 16 Nov freeze
Primary CI lower bound > 0 but point estimate < +0.19 pp, no guardrail breachedShip if the team agrees the effect is worth the cost; otherwise keep control
Primary CI includes 0, no guardrail breachedDo not ship. Keep control. Revisit after Black Friday
Any guardrail breached (basket exit, AOV, fee contacts, cancellations)Do not ship. Keep control and investigate
Primary CI upper bound < 0Kill. Revert and record the learning

8. Open questions and data gaps

  1. Basket session counts are missing. The CSV only has checkout sessions. Without basket sessions the primary metric and basket exit rate cannot be measured. Data team to supply by 8 Oct or we fall back to checkout-based conversion, which misses early exits.
  2. Audience numbers do not reconcile. The data team says 412,000 people placed an order in the last 30 days, but the CSV shows about 71,000 orders a month (132,196 ÷ 56 × 30 ≈ 70,800). At 3.8 sessions a month, 412,000 buyers would imply about 1.57M checkout sessions a month, against about 1.13M in the CSV (260,000 × 4.33). One of these definitions is wrong. I used the CSV, which is daily and specific to checkout, for all sample sizes.
  3. Cross-platform user ID. Needed for user-level randomisation (§2).
  4. Confirm launch date and build owner. Build must be ready by 9 Oct for a 12 Oct launch.

Grades and run details

Decision model 82 · LLM judge 93
Decision model checks
  • failUses the supplied evidence correctly20%
  • passAddresses the actual decision45%
  • partialRespects explicit constraints20%
  • passIdentifies material uncertainty92%
  • passAvoids unsupported claims41%
  • partialProduces the required deliverable53%
  • passRandomises by user100%
  • passWorks around the calendar100%
  • passDoesn't let the metric flatter the change66%
  • passAn unambiguous primary metric70%
  • passDecision rule written before the test100%
  • partialSized from the real traffic38%
  • passGuardrails with thresholds69%
  • passSays why a test is worth it here83%
Run
Run
#1
API response time
50 s
Submitted
8 Oct 2026

Needs more than a quick edit11 of 14 checks passed

Missing trust check for randomisation and guardrail thresholds for several metrics; a PM would need to add those before running the test.

Output

Waymark checkout experiment spec

Hypothesis

Showing the delivery date and fee on the basket page will increase the share of eligible shoppers who place an order by setting expectations earlier and reducing last-step abandonment. It may also cause some shoppers to leave sooner; the primary metric must capture both effects.

Design and randomisation

Randomise eligible shoppers 50:50 when they first view a basket with delivery information available:

  • Control: Current experience; date and fee appear at the final checkout step.
  • Treatment: Date and fee appear on the basket page and remain visible through checkout.

Assign by stable customer ID across app and web, so shoppers who use both platforms see the same variant. Use a persistent anonymous ID for guests and merge it with the account on login. Stratify assignment by platform at first exposure.

Metrics

  • Primary: Order conversion among eligible basket visitors: shoppers placing an order divided by shoppers randomised. This captures both earlier exits and improved final-step completion.
  • Secondary: Checkout-start rate; completion among checkout starters; step-by-step abandonment; time to order; AOV; results by app/web.
  • Guardrails: Basket-to-order conversion must not fall by more than 0.3 percentage points; monitor cancellations, fee-related support contacts, payment failures and site/app errors.

Sample size and duration

The traffic file covers 56 days. Summing its daily rows gives approximately 2.09m checkout sessions and 132k orders:

  • Baseline checkout-session conversion: 132k ÷ 2.09m ≈ 6.3%
  • Average traffic: 2.09m ÷ 56 ≈ 37.3k sessions/day, or 18.65k/arm/day at 50:50.

Power for a 5% relative lift (6.3% to 6.615%), with 80% power and two-sided 5% significance:

\[ n_{\text{per arm}}\approx \frac{2(1.96+0.84)^2(0.063)(0.937)}{(0.00315)^2} \approx 93{,}000 \]

Because shoppers can generate repeated sessions, conservatively inflate by the supplied 3.8 checkout sessions per buyer per month (worst-case design effect, assuming fully correlated sessions):

\[ 93{,}000 \times 3.8 \approx 353{,}000 \text{ sessions/arm} \]

\[ 353{,}000 \div 18{,}650 \approx 18.9 \text{ days} \]

Plan for at least 19 days, including full weeks and weekends, then allow time for order outcomes to mature. This is a provisional calculation: the file reports checkout sessions, not eligible basket visitors, and therefore cannot establish the primary metric’s baseline or power. Before launch, confirm basket-visitor volume and conversion, and validate the repeat-session assumption against deduplicated users. The supplied 412k monthly buyers and session-frequency figures should also be reconciled with observed traffic.

Calendar

Do not run concurrently with Payments’ checkout experiment, which ends 9 November. Starting 10 November would require about 19 days, crossing both the 16 November code freeze and 20 November Black Friday promotions. Defer until those changes and promotions are over and the freeze is lifted; the calendar does not specify those end dates. Confirm a stable window of at least three weeks before scheduling.

Decision rule

Ship only if the primary conversion lift is statistically significant at two-sided p < .05, the 95% confidence interval excludes zero, and the basket-to-order guardrail is not breached. Otherwise, do not ship; investigate platform and funnel-step results before proposing a follow-up. Don’t stop early for a positive result; stop only for a pre-agreed severe guardrail issue or data-quality failure.

Grades and run details

Decision model 82 · LLM judge 73
Decision model checks
  • passUses the supplied evidence correctly23%
  • passAddresses the actual decision50%
  • passRespects explicit constraints32%
  • passIdentifies material uncertainty47%
  • passAvoids unsupported claims46%
  • partialProduces the required deliverable68%
  • passRandomises by user26%
  • passWorks around the calendar94%
  • passDoesn't let the metric flatter the change75%
  • partialAn unambiguous primary metric91%
  • passDecision rule written before the test66%
  • partialSized from the real traffic86%
  • partialGuardrails with thresholds85%
  • partialSays why a test is worth it here53%
Run
Run
#1
API response time
37 s
Submitted
5 Oct 2026

Usable with a quick edit14 of 14 checks passed

The spec is complete and actionable; a PM could run it with only the pre-launch data checks already flagged in the document.

Output

Experiment spec: delivery date and fee on the basket page

Hypothesis

Showing the delivery date and fee on the basket page, rather than at the final checkout step, raises the share of basket sessions that end in an order. We expect fewer last-step abandons because the fee is no longer a surprise. The counter-risk is more exits at the basket, so the primary metric must count both.

Randomisation

  • Unit: logged-in user ID, not session or device. 31% of buyers use both app and web, and buyers average 3.8 sessions a month. Session-level assignment would show one person both experiences and make observations non-independent.
  • Split: 50/50 by salted hash of user ID, the same arm on app and web. Users are assigned on first basket view.
  • Independence: use a different salt from the Payments squad's "Pay later" test, so every arm is about 50% Pay-later (see Calendar).
  • Checks: run an A/A check in the week before launch. Run a sample-ratio-mismatch (SRM) test throughout, and pause if p < 0.001.

Metrics

Primary: order conversion = basket-page sessions that end in an order ÷ basket-page sessions, with standard errors clustered by user.

Do not use orders ÷ checkout sessions. If the fee scares people off at the basket, they never become checkout sessions, the denominator shrinks, and the treatment looks better than it is.

Secondary: - Basket→checkout-start rate (expected to fall, and we need to see by how much). - Checkout-start→order rate (the squad's mechanism). - Revenue per basket session. - Orders per user over the window. - Platform split (exploratory only).

Guardrails: - Average order value (AOV, baseline $64): fail if the lower CI bound is below −2% (−$1.28). - Revenue per basket session: fail if significantly negative. - Fee-related support contacts per 1,000 orders. - Basket-page error rate and latency. - 14-day repeat rate among exposed users. The 30-day repeat rate (38%) can't be read in a 3-week test.

Baseline from the traffic file

SessionsOrdersConversion
Week of 10 Aug258,43716,3366.32%
Week of 28 Sep262,04416,6766.36%
  • Weekly sessions are about 260k and daily volumes are stable, so I use p = 6.35%.
  • Platform split: app 57–58% of sessions at about 7.1% conversion; web 42% at about 5.3%.
  • Weekends run at about 65% of weekday volume, so the test must cover whole weeks.

Sample size

  • MDE: +3% relative, which is +0.19pp (6.35% → 6.54%). That is roughly 490 orders a week, or about $31k a week at $64 AOV, which is worth shipping for.
  • Settings: two-sided α = 0.05, power 80%, so (1.96 + 0.84)² = 7.84.
  • Per arm, ignoring clustering: n = 2 × 7.84 × p(1−p) / δ²
  • p(1−p) = 0.0635 × 0.9365 = 0.0595
  • δ = 0.00191, so δ² = 3.63×10⁻⁶
  • n = 0.932 / 3.63×10⁻⁶ ≈ 257k sessions
  • Clustering: users contribute about 2.7 sessions in 3 weeks. I assume an intra-user correlation of 0.2, giving a design effect of 1 + 1.7 × 0.2 ≈ 1.3. That puts the requirement at 257k × 1.3 ≈ 334k sessions per arm.
  • Duration: each arm gets about 130k sessions a week (260k ÷ 2), so 334k ÷ 130k = 2.6 weeks. Run 3 full weeks (21 days), which gives about 390k per arm.
  • For comparison: a 2% MDE needs 578k × 1.3 = 751k per arm, or 5.8 weeks, which the calendar can't fit. A 5% MDE needs 92k × 1.3 = 120k per arm, under 1 week.
  • Subgroups: web alone (42% of traffic) can only detect about 4.6% relative (3% × √(1/0.42)). Platform cuts are exploratory.

Data issues to resolve before launch

  1. Buyer count doesn't match the traffic file. The data team's 412k buyers in 30 days is inconsistent with about 70k orders a month in the file (16.4k a week × 30/7). Their 3.8 sessions per buyer implies about 1.57M sessions, against about 1.11M in the file. I sized from the traffic file. The data team needs to reconcile the two, since the user-level assumptions (the design effect) depend on it.
  2. Check the definition of `checkout_sessions`. I assumed it equals basket-page sessions. If it only counts sessions that reached checkout, the true basket-level baseline is lower and the test is longer. For example, at 4% conversion, n scales by (0.96/0.04) ÷ (0.9365/0.0635) ≈ 1.6×, which is about 4.5 weeks.
  3. Re-run the sums on the real basket-session baseline before launch, and fix the duration then (3 or 4 weeks).

Calendar

  • Black Friday: promotions start 20 Nov and code freeze starts 16 Nov. Promo traffic isn't representative, and anything not shipped by 15 Nov waits until after the freeze.
  • Waiting for Pay later to end (9 Nov) doesn't work. That leaves 10–15 Nov, which is 6 days and not enough.
  • Pay later (until 9 Nov) sits on the checkout page and affects the same outcome, so it can't be ignored. I'll run the test concurrently with an independent split. Each arm then gets about the same Pay-later mix, so the contrast stays unbiased. I'll pre-register a treatment × Pay-later interaction check, and report the effect by Pay-later arm. The Payments squad must freeze their allocation for the duration.
  • Search ranking (until 30 Oct) only touches search results pages. It's balanced by randomisation and needs no action, but I'll note it.
  • Schedule:
  • Build, QA and A/A: 5–11 Oct.
  • Run 12 Oct – 1 Nov (3 weeks).
  • Readout 2–4 Nov, decision before 9 Nov.
  • Ship ramp before the 16 Nov freeze.
  • Buffer: a 4-week run (to 8 Nov) still ends before Pay later does.

Decision rule

This is fixed in advance, with one analysis at the end of the run and no peeking.

  • Ship if the primary lift is positive with the 95% CI excluding 0, and no guardrail fails, and revenue per basket session isn't significantly negative.
  • Do not ship if the CI includes 0. We'd conclude "no detectable effect at +3%". Any wish to ship for fee-transparency reasons is a separate product decision, not an experiment win.
  • Kill if the primary is significantly negative, or if AOV or revenue per basket session breaches its guardrail. Basket exits are the main thing we expect to see here.
  • Extend: only if an outage or traffic shortfall leaves fewer than 334k sessions per arm, up to 28 days. Never extend because the result is "almost significant".
  • Interaction: if the effect differs materially by Pay-later arm, ship only to the configuration that will be live after 9 Nov, and confirm with the Payments squad which one that is.

Grades and run details

Decision model 93 · LLM judge 100
Decision model checks
  • passUses the supplied evidence correctly20%
  • passAddresses the actual decision69%
  • partialRespects explicit constraints21%
  • passIdentifies material uncertainty98%
  • passAvoids unsupported claims50%
  • passProduces the required deliverable60%
  • passRandomises by user100%
  • passWorks around the calendar100%
  • passDoesn't let the metric flatter the change99%
  • passAn unambiguous primary metric87%
  • passDecision rule written before the test99%
  • passSized from the real traffic63%
  • partialGuardrails with thresholds83%
  • passSays why a test is worth it here98%
Run
Run
#1
API response time
64 s
Submitted
6 Oct 2026

Check by check

Where the outputs differ comes first. Open a check to read the judge’s reasons. “Mixed” means the two graders disagreed.

Where they differ 4

Uses the supplied evidence correctlyMixedRightRight
Haiku 5.5 · API

All factual claims about the current situation are taken directly from the supplied files or are exact arithmetic from them.

GPT-6 Luna · API

All factual claims are directly from the supplied context or derived by correct arithmetic.

Sonnet 5.5 · API

All factual claims about the current situation are taken directly from the supplied context or derived correctly by arithmetic.

An unambiguous primary metricRightWrongRight
Haiku 5.5 · API

One primary metric is named, its direction is unambiguously good, and an SRM check is planned as a trust check.

GPT-6 Luna · API

Does not include a planned trust check such as a sample ratio mismatch or A/A test to verify randomisation.

Sonnet 5.5 · API

Single primary metric with a clear rationale for its direction, plus planned SRM and A/A trust checks.

Guardrails with thresholdsRightWrongRight
Haiku 5.5 · API

Basket exit rate, AOV, delivery-fee contacts, and cancellations are each listed with a threshold that would block rollout.

GPT-6 Luna · API

Only basket-to-order conversion has a threshold; cancellations, support contacts, etc. are listed without thresholds that would block rollout.

Sonnet 5.5 · API

Names AOV, revenue per basket session, support contacts, error rate, latency, and repeat rate, each with a threshold that would block rollout.

Says why a test is worth it hereRightWrongRight
Haiku 5.5 · API

It specifies the smallest detectable effect (+0.19 pp) and that the test can detect it in 3 weeks, justifying a test before the freeze, and the decision rule says what happens if results are inconclusive.

GPT-6 Luna · API

Does not explain why this decision merits a test given the traffic and stakes, nor suggest a cheaper alternative.

Sonnet 5.5 · API

Justifies the chosen MDE as worth shipping and checks feasibility against the calendar, implying the test is worth running.

All got right 10

Addresses the actual decisionRightRightRight
Haiku 5.5 · API

The output commits to a clear launch plan, a ship/no-ship decision rule, and states what would change each call.

GPT-6 Luna · API

The spec commits to a clear decision rule for shipping based on test results, framed for the PM.

Sonnet 5.5 · API

Commits to a clear experiment plan with a decision rule that maps every outcome (ship, don't ship, kill, extend) to an action.

Respects explicit constraintsRightRightRight
Haiku 5.5 · API

The spec is under 900 words, includes every required section, and shows the sample size sums.

GPT-6 Luna · API

The output is an experiment spec under 900 words, covering all requested elements.

Sonnet 5.5 · API

The spec is within 900 words and addresses all required elements of an experiment spec.

Identifies material uncertaintyRightRightRight
Haiku 5.5 · API

It names the missing basket session data, audience number discrepancy, and cross-platform ID need, and says how each would be resolved.

GPT-6 Luna · API

It identifies unknowns (basket visitor baseline, repeat-session assumption, calendar end dates) and says how to resolve them.

Sonnet 5.5 · API

Identifies material uncertainties (data inconsistency, definition of checkout_sessions, interaction with Pay later) and says how to resolve them.

Avoids unsupported claimsRightRightRight
Haiku 5.5 · API

Hypotheses and causal explanations are clearly labelled, and all confident claims are rooted in the supplied evidence.

GPT-6 Luna · API

Hypotheses and provisional calculations are clearly labelled, no unsupported factual claims.

Sonnet 5.5 · API

Assumptions are clearly labelled, and the hypothesis is presented as a hypothesis, not a fact.

Produces the required deliverableRightRightRight
Haiku 5.5 · API

The output is a complete experiment spec in the requested format, usable by the target reader with minor edits.

GPT-6 Luna · API

The spec includes hypothesis, randomisation, metrics, sample size with sums, calendar, and decision rule, usable as is.

Sonnet 5.5 · API

Complete experiment spec in the requested format, within the word limit, and usable as-is.

Randomises by userRightRightRight
Haiku 5.5 · API

It randomizes by logged-in user ID and explains that session-level assignment is invalid because users average 3.8 sessions/month and 31% cross-platform usage.

GPT-6 Luna · API

Randomises by stable customer ID across app and web, giving the cross-platform consistency reason.

Sonnet 5.5 · API

Randomises by logged-in user ID across platforms, explicitly citing cross-platform usage and session non-independence.

Works around the calendarRightRightRight
Haiku 5.5 · API

It addresses the Pay later test until 9 Nov and the 16 Nov code freeze by running overlapping with independent assignment and interaction analysis, avoiding a one-week squeeze.

GPT-6 Luna · API

Names both the payments test and code freeze, and defers until after promotions, avoiding a one-week squeeze.

Sonnet 5.5 · API

Addresses both the payments test and the Black Friday freeze, proposes concurrent independent assignment with an interaction check, and avoids a one-week squeeze.

Doesn't let the metric flatter the changeRightRightRight
Haiku 5.5 · API

Primary metric is orders per basket session to capture early and late drop-off, with a basket exit guardrail; it notes that last-step completion would be misleading.

GPT-6 Luna · API

Primary metric is orders per basket visitor, capturing both earlier exits and improved completion, with a basket drop-off guardrail.

Sonnet 5.5 · API

Primary metric is orders per basket session, not per checkout session, with a clear explanation and a basket drop-off guardrail.

Decision rule written before the testRightRightRight
Haiku 5.5 · API

The decision table maps win, small win, inconclusive, guardrail breach, and negative outcome to specific actions before the test runs.

GPT-6 Luna · API

Maps win, loss, and inconclusive outcomes to actions with clear thresholds (p<.05, CI excludes zero, guardrail not breached).

Sonnet 5.5 · API

Specifies ship, do not ship, kill, and extend conditions with explicit thresholds, including the inconclusive case.

Sized from the real trafficRightRightRight
Haiku 5.5 · API

Sample size is derived from the traffic CSV baseline (6.35% checkout conversion) with a detectable 0.19 pp effect, design effect, and the 3-week duration uses actual weekly session volumes.

GPT-6 Luna · API

Sample size derived from traffic file baseline and 5% relative lift, inflated for repeat sessions, runs whole weeks.

Sonnet 5.5 · API

Sample size derived from the traffic file baseline and a stated MDE, adjusted for clustering, with duration in whole weeks.

Results

Every setup we’ve tested on this task type, across all its tasks and repeats, graded on the current checklist. Calibrated. Where our PM checked the graders by hand, they agreed on 85% of 39 checks.

#Model · HarnessTask scoreDecision modelLLM judgeRunsCritical failures
1Sonnet 5.5withAPI92.696.42None
2Haiku 5.5withAPI83.496.72None
3Opus 5.5withClaude88.779.02None
4GPT-6 AstrawithChatGPT88.976.02None
5GPT-6 LunawithAPI89.165.22None
6GPT-6.1 SolwithAPI83.169.32None
7Gemini 3.8 FlashwithAPI77.347.92None
8Gemini 3.5 Flash-LitewithGemini47.813.321 capped

What you get for the cost

No setup scores within 5 points of the leader at half its cost or less here, so the leader is also the best value.

Task score against relative cost for each setup. The table below has the same figures.20304050607080901001×3×10×30×100×Cost per output, relative to the cheapest setup (log scale) →↑ Task scoreSonnet 5.5 · API: task score 95, 33× the cheapestHaiku 5.5 · API: task score 89, 2.7× the cheapestOpus 5.5 · Claude: task score 81, 49× the cheapestGPT-6 Astra · ChatGPT: task score 79, 79× the cheapestGPT-6 Luna · API: task score 76, the cheapestGPT-6.1 Sol · API: task score 75, 13× the cheapestGemini 3.8 Flash · API: task score 60, 7.4× the cheapestGemini 3.5 Flash-Lite · Gemini: task score 29, 2.1× the cheapest, 1 critical failureSonnet 5.5 · APIHaiku 5.5 · APIOpus 5.5 · ClaudeGPT-6 Astra · ChatGPTGPT-6 Luna · APIGPT-6.1 Sol · APIGemini 3.8 Flash · APIGemini 3.5 Flash-Lite · Gemini
Nobody beats these on both score and costAt least one critical failure
Task score and relative cost by setup
SetupTask scoreRelative cost (cheapest = 1)
GPT-6 Luna · API761.0×
Gemini 3.5 Flash-Lite · Gemini292.1×
Haiku 5.5 · API892.7×
Gemini 3.8 Flash · API607.4×
GPT-6.1 Sol · API7513×
Sonnet 5.5 · API9533×
Opus 5.5 · Claude8149×
GPT-6 Astra · ChatGPT7979×

Cost is each output’s tokens at the model’s list price, shown relative to the cheapest setup. Runs done in an app have no usage meter, so theirs are estimated from the same setup’s measured runs. How we compare cost

About the task

The PM job

Specifying an A/B test before running it.

Why it matters

Most tests are underpowered, or measure a metric nobody agrees is good.

What good looks like

  • One primary metric everyone agrees on the direction of
  • Decision rule stated up front
  • Guardrails
  • Power considered

Deliberately not measured

    Capability tested

    Test design

    The failure we’re looking for

    A test with no decision attached

    Grading

    Decision model and LLM judge, calibrated against a blind PM review