A/B Test: Guardrails, CUPED, and a Human Call

By William Zhu & the InfiniSynapse Data Team · Published: 2026-08-22 · Last updated: 2026-08-24 · Last verified: 2026-08-24 · Next review: 2026-11-24 · Editorial standards · Corrections

Table of Contents

TL;DR

We evaluate these patterns at the InfiniSynapse desk on sanitized composites; sample figures on this page are illustrative, not customer uplifts.

Direct answer: An a/b test is not finished when the interval is green. It ends in ship, hold, or iterate, signed by a named human, after guardrails and optional CUPED are written on the same memo as the SQL.

What you'll learn: why an a/b test is a three-way call; a six-row decision contract; when CUPED is a line and not a rescue; how to keep the design from being patched after freeze; an illustrative checkout hold; and the breaks that treat a chat as approval.

The hub method is A/B test analysis. This page is narrower: the last line of the comparison, not the first hypothesis.

What an A/B Test Must End With

Key Definition: An a/b test is a frozen randomized comparison that produces a ship, hold, or iterate memo a human signs, with named primary, guardrails, and inspectable SQL. The interval is a line in that memo. It is not the decision.

A structured document in RFC 8259 is a JSON object you can parse again. An a/b test should end as a structured object too: action, owner, window, CUPED state, and the query. A chat paragraph is not that object.

The comparison sits next to experiment analysis. That sibling starts with assignment. This page starts at the call you still owe after assignment is clean.

Ship, hold, or iterate is the product

Ship means the primary moved the right way, guardrails did not fail, and the owner accepts residual risk. Hold means you do not launch; the comparison may still be valid. Iterate means you keep the freeze, change a named thing, and run again with the same unit and the same kill metrics.

Natural language to SQL can be the execution path for the join. It is not a replacement for the last line. A memo that “recommends ship” in a bubble has skipped the product.

Do not patch the design after you see the number

JSON Patch is a listed set of operations. If you change the primary after a peek, write that as a new a/b test, not as a silent patch on the old one. Thawing the metric because the original looked flat is how holds become fake ships.

If variance reduction is the next object, continue in CUPED explained. CUPED can tighten an interval. It cannot choose ship.

A Ship-Hold-Iterate Framework

Every decision read should fill this table before anyone sends a launch email.

Decision rowWhat you lockTypical sourceFailure if skipped
ActionShip, hold, or iterateMemo last lineChat as approval
OwnerNamed humanSame memoModel as policy
PrimaryOne metric, one windowOutcome + noteMetric shopping
GuardrailsNamed kills, joined or “not measured”Adjacent tablesSilent harm
CUPEDCovariate name or offPre-periodLeaking tightness
SQLDownloadable query/tasks artifactSlide-only lift

Decision quality is the filled last line. “Looks good” is not an action. “Iterate on payment retry copy” is an action.

Web Linking describes relations you can follow. Assignment must link to outcomes the same way. A comparison whose join is implied in a screenshot cannot be signed.

How Teams Stop Short of the Call

Teams celebrate the badge. A comparison that stops at the badge still needs the call.

Stopping placeLooks like progressWhy it is incomplete
Green interval“We won”Guardrail unread
CUPED-tight interval“More confident”Covariate unnamed
Exposed-only lift“Users who saw it convert”ITT missing
Agent paragraph“The model says ship”No owner

Guardrails that veto a primary win

The comparison can win on checkout completion and still be a hold if refunds or latency move the wrong way. Pre-register those kills. If the join is missing, write “not measured” and consider a hold. Continue in guardrail metrics when the kill object is the gap.

Self-service analytics does not mean a PM ships from a sparkline. The memo still needs a reviewer who can open SQL.

CUPED as a line, not a rescue

Use CUPED on the comparison when a pre-period covariate is correlated with the outcome and the variant cannot change it. New users often have no such history; leave it off. Never apply CUPED to rescue a run you already stopped early. Name the covariate or do not use the method.

Tool Landscape for a Signed Memo

You do not need a new warehouse to finish the call. You need assignment, outcomes, a bound metric note, and a place to keep the memo. A dated CSV is valid if it includes assignment time.

InfiniSynapse can draft the memo on a source you authorize. It is not ChatBI. It does not invent a prebuilt experiment warehouse, and it does not write ship back into production. A data agent owns the trail in /tasks. The human owns the call.

Locale-stable metric names

CLDR exists so labels stay stable across locales. Bind “conversion” and “refund” the same way. A pack that uses a CMS string in one memo and a warehouse alias in another will produce two calls.

Unit grain that does not drift

H3 is a hierarchical index: you pick a resolution and you keep it. A pack that assigns users and analyzes sessions has changed resolution mid-map. Stop. Fix assignment. Then compute.

Data visualization of lift is fine after the call is drafted. Charts are not the signature.

If the artifact shape is the gap, use the experiment decision memo. If horizon math is the gap, use A/B test sample size.

Implementation Steps to the Human Line

Start from the frozen note. An a/b test that starts from “can we ship today” will shop for a metric.

Freeze, then join assignment to outcomes

Write unit, primary, window, and peeking rule. Confirm uniqueness and SRM. An a/b test on a join that uses first-event time instead of assigned_at will manufacture lift. Keep the randomizer’s IDs.

Bind kills and CUPED state before lift

List two or three guardrails. Set CUPED on or off with a named covariate. An a/b test that toggles CUPED after seeing the interval is a peek. Then ask for the memo: primary, interval, guardrails, balance, recommended action, SQL.

Write the call and the owner

The last sentence is ship, hold, or iterate plus a name. An a/b test does not ship itself. If marketing wants a public claim, raise the evidence bar before copy leaves the building.

Open the query. An a/b test without attached SQL is a slide. If the join is the missing file, continue in analyze experiment results in SQL.

Desk Sample: Illustrative Hold after a Primary Win

The following numbers are an illustrative desk composite, not a customer result and not an uplift claim.

ItemDesk composite (illustrative)
Window42 days, assignment-stable
Units88,100 users; 50.0% / 50.0%
PrimaryCheckout completion +1.9 pp (illustrative)
CUPEDPrior 28-day orders; named in note
GuardrailRefund rate +0.4 pp (illustrative)
Recommended actionHold
OwnerCheckout lead, named on memo

This a/b test is useful because the call is Hold. A primary-only dashboard would have looked like Ship. The refund join is the finding. Iterate means rewrite retry copy, keep the same unit, and run again.

A second a/b test that reuses the refund definition is how the desk accumulates memory. A new CMS experiment with a new “conversion” string is how memory resets.

Grouped bar chart: Primary, Guardrail, CUPED × Peek vs Frozen design (illustrative desk composite)

Figure. Illustrative desk composite (category × method). Not a customer experiment, SLA, or official benchmark.

Evidence classWhat you can citeWhat you cannot claim
Desk composite on this pageAction, owner, inspectable SQLCustomer uplift or vendor bake-off
Published public sources aboveStructured objects, links, indexesThat those RFCs ran this desk pack

Desk composite: +1.9 pp primary, +0.4 pp refund → hold. Context: JSON objects, JSON Patch, Web Linking, CLDR, H3.

We ran this check on a sanitized composite at the InfiniSynapse desk on 2026-08-23. The inspect order for a/b test was the assignment table, the written primary, and both intervals. We stopped when treating a green badge as ship could still ship. The memo stayed in draft. Figures stay illustrative. What you can copy is the assignment join and the on/off rule, not a lift.

Selection Scorecard for the Last Line

Score from 1 to 5. An a/b test that cannot name an owner should not win on a prettier interval.

CriterionWhat “5” looks likeDisqualifier
Three-way callShip / hold / iterate written“Looks good”
OwnerNamed humanModel as policy
GuardrailsJoined or “not measured”Primary-only ship
CUPED honestyNamed or offPost-treatment feature
AuditMemo + SQLChat-only winner
FreezeNo silent patchPrimary rewritten after peek

An a/b test scores well when finance can replay the hold. It scores poorly when the stack implies a prebuilt warehouse you do not operate.

Failure Modes that Skip the Human Call

Write the break on the memo. Reviews go faster when the skip is explicit.

Treating a green badge as ship

A significant primary is not a launch. An a/b test still needs guardrails and an owner. Shipping from the badge is how refunds show up in the weekly ops pack.

Silent design patches

Changing the primary, the window, or the inclusion rule after a look is a new a/b test. Attach the exploratory chart. Do not treat the new metric as the frozen contract.

Model paragraph as approval

The draft can recommend. The owner signs. An a/b test that files the bubble and deletes the SQL has no replay. A fourth pattern is CUPED on a leaking covariate used to “make the hold go away.”

Before you open a workspace, check four things: a written three-way action, a named owner, at least one guardrail join or an explicit gap, and SQL you can open. If those four are missing, you do not have a finished a/b test.

Route the same diagnosis to the live guide that owns the next object. Each row is a single hop.

Live guideOpen it when
A/B test analysisyou need the hub method
experiment analysisassignment is still dirty
CUPED explainedthe covariate is the next object
experiment decision memothe downloadable artifact is missing
what is a data agentyou need the trail object, not a chat

Write the decision memo; a human still signs it

Upload a sanitized assignment-and-outcome extract, bind primary and guardrails, and ask for a ship / hold / iterate memo with SQL. This check uses only sources you authorize.

Commercial association: You do not need the workspace to complete the educational diagnosis on this page.

Open InfiniSynapse

Use only authorized, sanitized data. Do not paste secrets.

How this page is sourced. William Zhu is cofounder of InfiniSynapse (GitHub @allwefantasy); no personal LinkedIn is published. Desk experience: designing and reviewing production analysis packs—definition locks, read-only source binds, and downloadable /tasks artifacts. Reviewed by analytics engineering · data platform · LLM security · editor. Editorial standards · corrections · publishing principles · Contact zhuhl@infinisynapse.com. Company Vision. COI: InfiniSynapse sells an AI-native Data Agent; the in-article banner is a commercial association. Fact-check: IETF RFC · datatracker.ietf.org · cldr.unicode.org · h3geo.org.

Frequently Asked Questions

Can an a/b test ship on a significant primary alone?

Bottom line: No. An a/b test ends in ship, hold, or iterate after guardrails and assignment integrity. A primary win with a refund or latency miss is a hold. If you peeked without a rule, treat the result as exploratory.

Who must sign an a/b test memo?

Bottom line: A human with launch authority. An a/b test can produce intervals and SQL. It cannot accept residual risk. Write the name. If marketing wants a public claim, raise the evidence bar before copy ships.

Does CUPED change the last line of an a/b test?

Bottom line: Only as tighter or wider uncertainty, not as a new action type. Leave CUPED off when the covariate leaks. An a/b test without CUPED is still valid. Do not use the adjustment to erase a hold.

Is a CSV enough to finish an a/b test?

Bottom line: Yes, if it includes unit, variant, assignment time, and outcomes. An a/b test on a file is still a test. Freeze the file date. Bind definitions. Do not treat a missing kill column as a clean guardrail.

Conclusion

An a/b test ends in ship, hold, or iterate. Guardrails and optional CUPED are lines on the same memo. SQL is attached. A human signs. A green badge is not the product. Hold when a kill metric moves. Iterate with the same unit. Do not silently patch the freeze.

When the assignment table and the metric note are ready, ask for that memo on an authorized extract at https://app.infinisynapse.com/. Open the SQL, write the call, and keep the file for the next a/b test.

A/B Test: Guardrails, CUPED, and a Human Call