Services

How to Run A/B Tests That Aren't Just Self-Deception: Sample Size, SRM Checks, and Choosing Between GA4, PostHog and GrowthBook

2026.08.24 · 5 views
How to Run A/B Tests That Aren't Just Self-Deception: Sample Size, SRM Checks, and Choosing Between GA4, PostHog and GrowthBook

At 800 daily visitors and a 2.4% baseline conversion rate, detecting a 20% lift takes 44 days — do the math before you buy the tool

Share:

The "41% Lift" That Proved Nothing

A client sends a screenshot: new CTA at 3.1%, old one at 2.2%, "can we ship it?" We asked three questions. How many days? Four. Users per arm? 1,180 and 1,460. How often did you check? Every morning. Each answer maps to a fatal flaw: insufficient sample, sample ratio mismatch, and false positives from repeated peeking. The expensive part came later: the team rolled the change sitewide, revenue didn't move three months on, and nobody could explain why.

When A/B Testing Fits, and When It Doesn't

Good fitPoor fit
≥ 1,000 conversion events per month< 200 per month, so any test runs half a year
One north-star metric and a prior hypothesis"Let's see which looks better," no hypothesis
Page and environment stable for the durationMid-redesign, payment migration, or a big promo
Engineering capacity for server-side or SDK bucketingThird-party JS only, while caring about Core Web Vitals
B2C, e-commerce, SaaS signup funnelsB2B with five high-ticket deals a month

For low-traffic sites the right move is a CRO audit plus qualitative research: 5–8 moderated usability sessions, Microsoft Clarity replays and heatmaps, step-by-step checkout drop-off analysis. At small sample sizes these carry far more explanatory power.

Alternatives Matrix

OptionBucketingStatisticsStarting cost (NT$)Main risk
GA4 + BigQuery, DIYRoll your own flagsPython/R, self-computedTool 0; queries 500–3,000/moYou build the stats pipeline; event latency
PostHogSDK, client or serverFrequentist plus sequential3,000–15,000/mo past the free tier (pricing)Cost scales sharply with events
GrowthBookFlags, fully server-side capableBayesian plus sequential (docs)Self-host 0, hosting 1,500–4,000/moYou own the SDK endpoint and warehouse
StatsigSDK plus server-sideSequential, CUPEDLarge free tier, then per-eventAdvanced features gated to enterprise
VWO / OptimizelyVisual editorBuilt inFrom ~150,000/yr; Optimizely often seven figuresClient-side injection: highest flicker and CLS risk
Google OptimizeSunset September 2023 (notice), don't plan around it

The Full Process (5 Phases, 6–10 Weeks)

  • Phase 1 — CRO audit and hypothesis backlog (1–2 weeks). Deliverables: funnel drop-off table, replay summary, 20–30 hypotheses ranked by ICE. Tools: GA4 Explorations, Microsoft Clarity, Figma, Notion.
  • Phase 2 — Design and sample size (3–5 days). Deliverable: a spec with one primary metric, three guardrails, MDE, duration, stopping rule. Tools: Evan Miller's and GrowthBook's calculators.
  • Phase 3 — Implementation (1–2 weeks). Deliverables: flag service wired up, server-side bucketing (Next.js or Laravel middleware), assignment ID in a first-party cookie, SRM dashboard.
  • Phase 4 — Run and monitor (3–7 weeks). Deliverables: daily SRM check, weekly guardrail report on error rate, LCP and support tickets. The primary metric stays sealed.
  • Phase 5 — Readout and decision (3–5 days). Deliverables: effect size with confidence intervals, segment breakdown, ship or rollback decision.

Real Cost Breakdown

ItemAmount (NT$)Notes
CRO audit and hypothesis backlogFrom 35,00025–35 hours
CRO Experimentation Starter PackageFrom 80,000Flag architecture, server-side bucketing, SRM monitoring, first experiment
CRO Monthly AdvisoryFrom 25,000/month1–2 experiments per month, designed and read out
Tooling subscription0–15,000/monthSelf-hosted can be zero; SaaS scales with events

Hidden costs:

  • Warehouse queries. BigQuery bills past the free 1 TB monthly scan; NT$500–3,000/month is common for high-event sites.
  • Technical debt. Uncleaned flags become a maintenance burden within six months (4–8 hours per quarter).
  • Performance tax. Client-side anti-flicker snippets block rendering and worsen LCP and CLS, where the good threshold is 0.1. The rework costs more than doing it right.
  • Opportunity cost. A seven-week experiment freezes that page for seven weeks.
  • Analysis labour. 6–10 hours per experiment; an unread result is worth zero.

Client Expectations vs. Reality

What clients assumeWhat actually happens
"We'll know in two weeks"At 800 daily visitors and a 2.4% baseline, a 20% relative lift (to 2.88%) needs about 17,500 users per arm, 35,000 total, which is roughly 44 days, rounded to 7 whole weeks. A 14-day run only detects lifts of roughly 35% or more
"More variants, faster answers"Four arms share the same traffic: 44 days becomes about 88 days, and multiple comparisons push false positives from 5% to 14%
"We need daily numbers"Daily peeking on a fixed-horizon design pushes the real type I error rate to 20–30%
"A winner means revenue goes up"Signup rate wins while refund rate quietly rises. Without guardrails you never see it
"Install the tool, insights appear"Hypothesis quality decides everything. Teams without a backlog run dry by month three

Six Traps and How to Avoid Them

  • Sample Ratio Mismatch. A 50/50 split landing at 48/52 means bucketing or tracking is broken and the result is void. Fix: daily chi-square test; stop and debug at p < 0.001 (SRM checker).
  • Peeking and stopping on a win. Fix: hard-code the end date, or use sequential testing with always-valid p-values (GrowthBook and Statsig support it).
  • Multiple comparisons. Watch five metrics and the chance of at least one "significant" result is 22.6%. Fix: one primary metric, the rest guardrails, plus a Benjamini-Hochberg correction.
  • Flicker (FOUC) and layout shift. Client-side swaps show the old version first. Fix: bucket server-side or at edge middleware.
  • Cross-device identity leakage. The same person sees A on mobile and B on desktop. Fix: bucket by user_id when logged in, cookie ID otherwise, with a fixed hashing seed.
  • Novelty effects and weekly seasonality. New designs look good for three days. Fix: run whole weeks, minimum 14 days.

Success Metrics and the 90-Day Roadmap

  • Day 30: flags and server-side bucketing live, SRM green daily, ≥ 20 hypotheses in the backlog, first experiment running its full duration. Metrics: no LCP or CLS regression.
  • Day 60: 2–3 experiments read out including losers, segment breakdowns for new vs. returning and mobile vs. desktop. Metrics: ≥ 80% completion rate, a written conclusion per test.
  • Day 90: at least one winner shipped and back-tested. Metrics: 5–15% relative lift on the primary funnel, two experiments per month, zero flag debt.

Decision Checklist (12 questions, all yes before you start)

  • ☐ ≥ 1,000 conversion events per month?
  • ☐ Can I name one single primary metric?
  • ☐ Have I calculated MDE and duration, and can I live with it?
  • ☐ Willing to freeze that page for the whole test?
  • ☐ Three guardrail metrics (errors, performance, refunds/complaints)?
  • ☐ Can I bucket server-side or via SDK rather than raw JS injection?
  • ☐ A daily SRM check in place?
  • ☐ Stopping rule and decision criteria written in advance?
  • ☐ Do I accept a null result without moving the goalposts?
  • ☐ A hypothesis backlog to feed the next test?
  • ☐ Do I know who cleans up the flag afterwards?
  • ☐ If the math says three months or more, will I switch to a qualitative CRO audit?

FAQ

My site gets 200 visitors a day. Can I still A/B test?

At a 2.4% baseline, detecting a 20% lift takes roughly 175 days, and the environment will have changed. Redirect that budget into a CRO audit, usability testing and funnel repairs.

Google Optimize is gone. What is the free replacement?

GA4's BigQuery export (free) with self-hosted GrowthBook is the cheapest viable stack, but it needs engineering and statistics capability. Without engineers, use PostHog or Statsig free tiers.

Do I really need server-side bucketing?

If you care about SEO and Core Web Vitals, effectively yes. Client-side bucketing needs an anti-flicker mask that degrades LCP and causes layout shift.

The result wasn't significant. Was it wasted?

No. "This change isn't worth 20% or more" is actionable. The wasted tests are the ones with no hypothesis and no stopping rule.

How does ScriptWalker price CRO work?

CRO Experimentation Starter Package from NT$80,000; CRO Monthly Advisory from NT$25,000/month; low-traffic sites can take the CRO Audit package from NT$35,000.

Next Step

Start with the 12 questions above. If you stall on duration, what you need isn't an experimentation tool but an honest CRO audit. Book a free 30-minute consultation: we'll run the sample size calculation on your actual traffic, then tell you whether to A/B test or go qualitative.

Share: