TL;DR
A guardrail metric is a metric an A/B test must not make worse. It sits next to the primary metric so a conversion win cannot quietly cost refunds, margin, retention or speed. Pick two or three guardrails per test, one for each realistic way the change could hurt, and write down before launch how much worse each one is allowed to get. A guardrail that is not significantly worse has not been shown to be safe. Read the top of its confidence interval against your threshold, and compute it on the same warehouse definitions the business reports.
A guardrail metric is a metric an A/B test must not make worse, such as refund rate, gross margin or page load time, checked alongside the metric the test is trying to improve. The primary metric tells you whether the change worked. The guardrails tell you whether it worked at someone else's expense.
This guide covers why guardrails exist, the main types with examples, how to choose two or three for a test and set their thresholds before launch, and how to read a guardrail result without fooling yourself. The last part is the one most teams get wrong: a guardrail is only as good as its definition, and the definitions that matter usually live in the warehouse, not in the testing tool.
Why guardrail metrics exist?
Every A/B test optimizes something local. The checkout team is measured on conversion, the growth team on sign-ups, the lifecycle team on email clicks. A change can move that number by moving a cost onto a metric the team does not watch. A checkout that removes the order summary step converts more visitors, and some of them did not mean to buy what they bought.
Conversion goes up this week; refunds go up next month, and they land on the finance team's report.
None of this needs bad intent. It is what happens when one metric is the goal and nothing else is checked. A guardrail turns the unwritten rule ("don't break anything") into a written one: these metrics, these limits, checked on every test. That gives the team running the test a clear bar, and gives the teams who own the guarded metrics a reason to trust the result.
Types of guardrail metrics, with examples
Most guardrails fall into four groups. The right column matters more than it looks: it is where the data for each guardrail actually comes from.
| Type | Examples | What it catches | Where the data lives |
|---|---|---|---|
| Business | Refund rate, gross margin per user, average order value, 30-day retention, subscription cancellations | A win that costs money or loyalty later: discount-driven conversion, impulse orders that come back, users who sign up and never return | Orders, billing, payments and finance tables |
| Experience | Support tickets per 1,000 users, email unsubscribes, complaint rate, app uninstalls | A change that confuses or annoys people, even when they still convert | Support desk exports, email platform data, app store and mobile events |
| Technical | Page load time (p75), API error rate, crash rate, failed payments | A variant that is slower or breaks more often, which can hurt every other metric | Application logs, performance monitoring, payment provider data |
| Integrity | Sample ratio mismatch, users seen in several variants, exposure logging coverage | A broken test, where the comparison itself cannot be trusted | The exposure table the experimentation tool writes |
Integrity checks are a different kind of guardrail. They do not ask whether the variant hurt the business; they ask whether the test is valid at all. If you planned a 50/50 split and got 52/48, something in assignment or logging is broken, and every other number in the report is suspect. Sample ratio mismatch is the most common of these checks, and it belongs on every test regardless of what else you guard.
How to choose guardrail metrics for a test?
A long list of guardrails feels safe and is not. Each extra metric is another chance for a false alarm, and a test with twelve guardrails has close to a coin-flip chance of showing one of them "moving" by chance. Two or three per test, plus the integrity checks, is enough for most changes.
List how the change could hurt
Ask what the variant could plausibly make worse. A pricing page test could lower margin; a new onboarding flow could lower week-2 retention; a heavier page could slow load time. Each realistic risk gets one guardrail. Risks nobody can name do not need one.
Prefer metrics another team owns
The best guardrails are the numbers someone else reports: finance's refund rate, support's ticket volume, the platform team's latency. That is where local optimization pushes its costs, and those owners will ask about them.
Check the metric can move inside the test window
Refunds arrive days or weeks after the order. Retention needs time to mature. If the test runs for two weeks and the return window is 30 days, either measure refunds only on orders old enough to have matured, or extend the analysis window.
Set a threshold for each one
Write down the largest harm you would accept, in the metric's own units: refund rate may not rise by more than 0.5 percentage points; p75 load time may not rise by more than 100 ms. This is the non-inferiority margin, explained below.
Write the decision rule down
Before launch, record the primary metric, the guardrails, their margins and what happens if one fails: ship, extend the test or stop. Deciding after the results arrive invites reading the numbers you want to see.
How to read a guardrail result?
The usual habit is to check whether a guardrail is "significantly worse" and, if not, call it safe. That reading is wrong more often than people expect. A p-value above 0.05 says the data could not rule out zero harm. It does not say the data ruled out meaningful harm. If the guardrail has few observations, as downstream metrics like refunds often do, the test may simply not have been able to see the damage. (For a refresher on p-values and intervals, see A/B testing statistics for beginners.)
The confidence interval answers the question you actually have. It is the range of effects that fit the data. Take the threshold you set before launch, the non-inferiority margin, and compare it with the end of the interval that points toward harm:
- The whole interval is on the safe side of the margin. The guardrail passes. Even the worst effect consistent with the data is a harm you agreed to accept.
- The interval crosses the margin. Inconclusive, whatever the p-value says. The data is consistent with acceptable harm and with harm you said you would not accept.
- The whole interval is past the margin. The guardrail fails. The change does more damage than you agreed to.
This is the logic of a non-inferiority test, and it needs no new tools: a lift, a 95% interval and a number you wrote down in advance.
Worked example: a checkout test that wins on conversion
An e-commerce team tests a one-page checkout against the current three-step flow. The primary metric is order conversion per exposed user. The guardrail is refund rate (refunded orders divided by orders), with a margin of +0.5 percentage points, agreed with finance before launch. The results are read 30 days after the test ends, so every order in it has had time to come back.
| Metric | Role | Control | One-page checkout | Change | 95% interval | Read |
|---|---|---|---|---|---|---|
| Users exposed | Integrity | 40,000 | 40,112 | 50.07% of traffic | p = 0.69 vs planned 50/50 | Split as planned |
| Order conversion | Primary | 5.00% (2,000 orders) | 5.40% (2,166 orders) | +0.40 pp (+8%) | +0.09 to +0.71 pp | Win, p = 0.011 |
| Refund rate | Guardrail, margin +0.5 pp | 3.0% (60 refunds) | 3.6% (78 refunds) | +0.60 pp | −0.48 to +1.68 pp | Inconclusive, p = 0.28 |
Read it the habitual way and the test ships: conversion is up and significant, refunds are "not significantly different". Read the interval and the picture changes. Refund rate could have risen by as much as 1.68 percentage points, more than three times the margin finance agreed to. The test has not shown that refunds are fine.
It has shown it cannot tell.
The reason is sample size. The guardrail is measured on orders, not users, so it has about 2,000 observations per variant against 40,000 for the primary metric. Detecting a 0.5-point rise on a 3% refund rate with 80% power would take roughly 20,000 orders per variant. The test was sized for conversion and is far too small for its guardrail.
The team has three honest options: run the test longer, or on more traffic, until the refund interval is narrow enough to clear the margin; ship with an explicit check on refund rate after 30 days and a rollback plan; or redesign the guardrail as refunds per exposed user, which uses the full 40,000-user denominator and also counts a change in who buys. What it should not do is report "no impact on refunds". The time to find this out is before launch, when the guardrail and its margin are written down and someone checks whether the test can measure them.
Guardrails only work on the business's own definitions
Look again at the example. The refund guardrail only means something if "refund rate" is the refund rate finance reports. In most companies, that number is not in the testing tool. The testing tool sees the events its SDK sends: an exposure, a click, a purchase event fired from the browser.
Refunds, chargebacks, cancellations, discounts and cost of goods are recorded later, by other systems, in billing, payments and finance tables that land in the data warehouse.
So teams improvise. They track a client-side refund_requested event and call it refund rate. They use a purchase event's value as revenue, before discounts and returns. Margin is usually not guarded at all, because the testing tool has no cost data. Each of these is a guardrail with its own definition, different from the one the business reports, and two problems follow:
- A test can pass its guardrail and still move the real number. If the tool's refund event misses refunds handled by support, the variant that drives more of them looks clean.
- Nobody trusts the result. When the experiment says refunds are flat and finance's dashboard says they are up, the meeting is about whose number is right, not about whether to ship.
The fix is to compute guardrails where the business data already is. If the experimentation tool writes its exposures to the warehouse, a test result is a join: exposures, by user and variant, to the same order, refund and margin tables that feed the KPI dashboards. Then the guardrail is not a test-specific approximation of refund rate. It is refund rate, defined once by the data team, and the experiment and the finance report cannot disagree about what it means. (Modeling A/B tests in the data warehouse covers how to lay out the exposure data.)
This also changes who sets the guardrails. When refund rate and margin are governed metrics that already exist, the product team does not have to invent them for each test. It picks them from the list the business already uses, and the owners of those metrics can read the result in their own terms.
Reading guardrails on your warehouse with Mitzu
Mitzu reads A/B test exposures from your warehouse and reports lift, confidence intervals, guardrails and health checks on the same metrics your business reports; your experimentation tool keeps assigning users. The data team defines metrics such as net revenue, refund rate and margin once on fact and dimension tables (see BI and governed metrics), and the same definitions appear on KPI dashboards and in test results. Every metric in a test gets its lift against control, a 95% interval and a p-value corrected for multiple comparisons, and every test carries health checks: traffic split, users in several variants and window coverage. Experiment analysis in Mitzu shows a full result.
Start free on your warehouse, or book a demo to see your own tests read on the metrics your business reports.
FAQ
What are guardrail metrics in A/B testing?
Guardrail metrics are metrics an A/B test must not make worse, checked alongside the primary metric the test is trying to improve. Typical examples are refund rate, gross margin, retention, support tickets, page load time and error rate. If the primary metric wins but a guardrail gets worse beyond an agreed threshold, the change is not shipped as is.
What are examples of guardrail metrics?
Business guardrails include refund rate, gross margin per user, average order value and 30-day retention. Experience guardrails include support tickets per 1,000 users and email unsubscribes. Technical guardrails include p75 page load time, API error rate and crash rate. Integrity checks such as sample ratio mismatch confirm the test itself is valid.
How many guardrail metrics should a test have?
Usually two or three, plus integrity checks such as sample ratio mismatch. Each guardrail should match a realistic way the change could cause harm. More guardrails raise the chance that one moves by luck, which leads to false alarms or to people ignoring guardrails altogether.
Does a non-significant guardrail mean the change is safe?
No. A non-significant result means the test could not rule out zero harm; it does not mean harm was ruled out. Compare the end of the guardrail's 95% confidence interval that points toward harm with the threshold set before launch. If that end is past the threshold but the other end is not, the result is inconclusive and the test may need more data; if the whole interval is past the threshold, the guardrail failed.
What should you do when the primary metric wins but a guardrail fails?
Do not ship it as is. Look at why the guardrail moved, for example by breaking the result down by segment or platform, and decide with the guardrail's owner whether the trade is acceptable. Often the answer is a revised variant that keeps the gain without the harm, tested again.

