ProductHow it worksPricingBlogDocsLoginFind Your First Bug
Quara the frog inspecting a blank dial marked with a single flat line at the end of a row of four gauges, the other three showing steady lime needles, in a dark warehouse where a conveyor carries crates past a lime gate
TestingSmoke TestingQA Metrics

Smoke Test Metrics: Is Your Gate Working?

Tom Piaggio
Tom PiaggioCo-Founder at Autonoma

Smoke test metrics quantify whether a smoke gate is actually catching something, not just running on schedule. The four that matter are smoke pass rate, escaped-defect rate past the gate, time-to-signal, and suite size measured against a declared critical-path count. None of the four is useful as a name alone; each one only means something once you can show the formula and the worked number behind it.

Someone asked whether the smoke gate is actually catching anything, or how many smoke checks a suite should have, and the honest answer requires arithmetic you can show your reader, not a metric name copied off a vendor's KPI page. Most pages on smoke test metrics list five or six names and stop, with no formula, no worked number, and no flag for which of those numbers quietly goes up while the suite gets worse.

If you need the definition first, that lives on what smoke testing actually checks; this page assumes you already have it.

This is written for the engineer, SDET, or release owner right-sizing or defending an existing smoke gate: proving it works, sizing it, or explaining the check count to someone above them. It's not written for the QA lead building a suite-allocation strategy across a test org, the reader asking whether an AI-generated suite tests anything real (that's ai-generated test theater), or someone picking edge-case inputs for a single test case, one level of detail below anything here.

Smoke Test Pass Rate: The Metric Everyone Reaches for First

smoke test pass rate = (passing smoke runs / total smoke runs) × 100

Take one week of runs against main: 120 smoke runs triggered, 111 came back green. 111 / 120 = 0.925, which is a 92.5% pass rate.

That number is easy to compute and easy to put on a dashboard, which is exactly the problem. Smoke test pass rate is a build-health metric, not a gate-quality one. A gate that never goes red is equally consistent with two different worlds: builds that are genuinely healthy, and a suite checking so little it could not fail if it tried. The number alone can't tell you which; it needs the other three metrics below to mean anything.

Escaped-Defect Rate: What Got Past the Gate

escaped-defect rate = (defects that passed smoke and surfaced later / total defects found in the release window) × 100

One release window surfaced 43 defects. Six were critical-path breakages the smoke gate passed clean, only showing up downstream. 6 / 43 = 0.1395, rounding to a 14.0% escaped-defect rate.

That headline percentage is the one people quote, but it isn't worth tracking week over week, because the denominator (total defects found) moves for reasons that have nothing to do with the smoke gate. Two other denominators survive that problem, because they are business-side counts instead of suite-side ones: escapes per release, 6 escapes / 4 releases = 1.5 escapes per release, and escapes per critical flow, 6 escapes / 12 critical flows = 0.5 escapes per flow. For the general-purpose version of this metric, the defect escape rate breakdown covers it without re-deriving it here. The distinction behind why those two survive is the same one that breaks pass rate later in this article.

Two kinds of denominatorOnly one moves with more testsSuite-side countsChecksRunsCasesInflates when tests are addedBusiness-side countsReleasesCritical flowsIncidentsHolds steady either way

Suite-side counts move when you add tests; business-side counts do not.

Time-to-Signal: How Long Until You Know

time-to-signal = median wall clock from commit pushed to smoke verdict posted

Sum the components for a typical run: runner queue wait, 40s. Build and deploy to preview, 3m 10s (190s). Suite execution, 2m 05s (125s). Report and annotate, 15s. 40 + 190 + 125 + 15 = 370 seconds, which is 6 minutes 10 seconds.

Time-to-signal earns its place because it's the one metric here that visibly worsens as a suite balloons, a useful counterweight to pass rate, which can hold steady or even improve while the suite grows. Martin Fowler's continuous integration write-up sets a ten minute rule for build times, on the grounds that every minute cut from the build is a minute back for every developer on every commit. Breaking it into components matters because the fix differs for each: queue wait is a capacity problem, build time is an infrastructure problem, and suite execution is a scope problem, the one component that grows in direct proportion to how many checks you added.

Time-to-signal, component by componentFour handoffs summing to 370 secondsQueue 40sBuild and deploy 190sExecution 125sReport 15s370 seconds total, 6m 10s

Queue wait, build, execution and reporting add up to 6 minutes 10 seconds, and each segment has its own fix.

Suite Size Against Critical-Path Count: How Many Smoke Tests Should You Have

critical-path coverage = (critical paths with at least one smoke check / total declared critical paths) × 100 check density = total smoke checks / declared critical paths

Twelve declared critical paths. The suite holds 34 checks. Eleven of the twelve paths have at least one check. Coverage: 11 / 12 = 0.9167, which is 91.7%. Density: 34 / 12 = 2.83 checks per path.

This is the actual answer to "how many smoke tests should I have," and it isn't a magic number. The target check count is set by the declared critical-path count, at roughly one level of depth per path, the same shallow-not-deep property that separates a smoke check from a regression case. Density between 1 and 3 checks per path reads as a smoke suite behaving like one. Density past roughly 6 signals the suite has quietly grown into a regression suite wearing a smoke label, worth splitting the two apart before it starts eating the time-to-signal budget. That's a rule to reason through for your own suite, not a benchmark to hit blindly.

12 critical paths, 11 covered34 checks, density 2.83 per pathPath 1Path 2Path 3Path 4Path 5Path 6Path 7Path 8Path 9Path 10Path 11Path 12Uncovered

Eleven of twelve critical paths are covered; the twelfth is the gap coverage alone would hide.

MetricFormulaWorked resultWhat it hides
Smoke test pass ratepassing runs / total runs × 10092.5% (111 / 120)Build health, not gate quality
Escaped-defect rateescapes past gate / total defects × 10014.0% (6 / 43)Denominator you don't control
Time-to-signalcommit push to verdict, wall clock6m 10s (370s)Nothing, it gets worse honestly
Critical-path coveragecovered paths / total paths ×10091.7% (11 / 12)Depth per path
Check densitytotal checks / critical paths2.83 checks per pathNo universal target, just a range

How Autonoma Reports Smoke Signal

Every metric above assumes a suite you can point to and count: this many runs, this many checks, this many declared paths. That holds for a hand-curated suite. It gets shakier once the suite is generated and regenerated on every change, because a check count that resets every pull request isn't a stable thing to graph.

That's the situation our agents create on purpose. They read the customer's codebase, derive the critical paths the way a human reviewer would, and generate and maintain end-to-end tests that run against the live, deployed application, not a saved snapshot. The Diffs Agent re-reads every pull request and updates the suite to match: new paths picked up, dead paths retired. Because the suite is regenerated rather than curated, the suite-side denominators from the table above stop describing anything stable enough to track. The number worth surfacing instead is the review-bound one: how many failures actually need a person to look at them, where the signal concentrates once authoring stops being the bottleneck.

Put plainly: this gate used to be curated by hand because a human had to run each check. When checks are derived from the codebase and healed automatically as it changes, the gate stops being a list and becomes a signal you regenerate, and the scarce work moves from writing checks to reviewing what the suite surfaces.

That's one piece of the picture, not the whole one. Autonoma is the behavioral, end-to-end execution layer. It doesn't replace a unit test runner, a contract-testing framework, a load-testing tool, an accessibility scanner, or your incident data, and was never meant to. Escaped-defect counting depends entirely on your own defect tracker and your own definition of a critical flow. No tool, including this one, can supply that judgment for you.

The Honest Flag: Why Pass Rate Breaks First When Suites Balloon

Raw pass rate is the metric that breaks first when a suite grows, and the arithmetic proves it. A small, curated suite runs 34 checks with 3 failing: 31 / 34 = 0.9118, a 91.2% pass rate. A ballooned, machine-generated suite runs 340 checks with 9 failing: 331 / 340 = 0.9735, a 97.4% pass rate.

The pass rate improved by more than six points while the absolute number of failing checks tripled. The second suite isn't healthier than the first; it's just bigger, and its denominator grew faster than its numerator problem did.

Same failures growing, pass rate climbingSmall suite: 34 checks, 3 failing91.2%Ballooned: 340 checks, 9 failing97.4%

The failing segment shrinks visually even though the absolute failure count tripled.

That's the rule that survives a machine-authored suite: a metric whose denominator is a suite-side count (checks, runs, cases) can be improved just by adding tests, whether or not the product got any healthier. Metrics whose denominator is a business-side count (releases, critical flows, incidents) can't be gamed the same way, which is exactly why escapes per release and escapes per critical flow belong on a dashboard instead of raw pass rate. This is not a smoke-specific quirk. DORA's delivery metrics measure instability with change fail rate, the ratio of deployments that require immediate intervention, so its denominator sits outside the test suite entirely. DORA's own list of pitfalls opens with setting metrics as a goal and ignoring Goodhart's law. For the false-confidence version of this problem in AI-generated suites, ai-generated test theater covers it directly; for what to actually display once you've picked the right denominators, the QA metrics dashboard guide covers that side of it.

A metric whose denominator you can inflate by adding tests will always look better with more tests in it. That's not health. That's arithmetic.

Getting These Numbers Onto a Release Gate

None of these four metrics is useful alone. Pass rate says the build shipped green. Escaped-defect rate, counted against releases and critical flows, says whether the gate catches what matters. Time-to-signal says what the gate costs every run. Wiring those numbers into a job that actually blocks a promote is covered in the automated smoke gate walkthrough. Coverage and density answer how big the suite should be, without picking a number out of the air. Together they feed into whether a build is ready to ship, which a release-readiness checklist walks through as its own gate.

If your smoke suite is still a list someone wrote by hand three years ago, most of this article is diagnostic. Autonoma is built for the version of this problem where the suite regenerates itself instead of quietly going stale, so these metrics measure something still true next quarter, not a snapshot of what critical paths looked like the last time someone remembered to update the list.

Frequently Asked Questions

Smoke test metrics are the numbers that show whether a smoke gate is catching something rather than just running. Four carry weight: pass rate, the share of smoke runs that come back green; escaped-defect rate, the share of defects the gate passed clean that surfaced later; time-to-signal, the wall clock from commit pushed to verdict posted; and suite size measured as coverage and density against a declared critical-path count. Each one needs a formula and a worked number behind it, because the names alone do not tell you whether the gate works.

There's no fixed number to target. The right count is set by your declared critical-path count, at roughly one check per path, which gives a check density between 1 and 3. A suite with 12 critical paths and 34 checks has a density of 2.83, which reads as a smoke suite doing its job. Density climbing past roughly 6 usually means the suite has grown into a regression suite wearing a smoke label, and it's worth splitting the two apart rather than adding more critical paths to justify the size.

There isn't a target percentage worth chasing on its own, because pass rate is a build-health metric, not a gate-quality one. A suite with 92.5% pass rate could be catching real problems or could be checking so little it can barely fail. Pass rate only becomes meaningful alongside escaped-defect rate and check density, which show whether the suite is actually watching the paths that matter.

Because pass rate's denominator is a suite-side count: the total number of checks or runs. Adding tests grows that denominator faster than it grows the numerator problem, so the percentage improves even while the absolute number of failures grows. A 34-check suite with 3 failures reads as 91.2%; a 340-check suite with 9 failures, triple the failures, reads as 97.4%. Metrics with a business-side denominator, like escapes per release, don't have this problem.

Autonoma works on the thing those metrics measure, which is usually where the numbers actually move. It generates and maintains the smoke suite itself, deriving critical paths from your codebase and running checks against a live preview, with the Diffs Agent updating the suite on every pull request. That is what pulls escaped-defect rate down and holds check density in range, because a suite that tracks the product catches what a stale one passes clean. You keep reading the four metrics in your own CI reporting and defect tracker, against your own definition of a critical flow, and Autonoma keeps the suite behind those numbers current.

The execution component does, because it scales roughly linearly with how many checks run. Queue wait and build time don't scale with suite size at all; they're capacity and infrastructure problems respectively. That's the reason to break time-to-signal into its four components instead of tracking one wall-clock number: the fix for a slow signal depends entirely on which component grew.

Related articles

An isometric 3D scene of a build artifact travelling on a conveyor belt through a glowing lime archway gate, with an operator at a console beside it, representing an automated smoke testing gate in a deploy pipeline

How Automated Smoke Testing Blocks a Bad Promote

Automated smoke testing as a real GitHub Actions gate: the exit-code contract, blocking vs advisory jobs, and why keeping the suite green is the hard part.

A balance scale weighing a manual smoke testing checklist and stopwatch on one pan against a stack of automated test files and maintenance tools on the other, with coins beside each pan

When Does Manual Smoke Testing Beat Automation?

Manual smoke testing wins in three specific cases. Here's the cost rule, runs per week times minutes per run against authoring plus maintenance, worked in full.

An isometric grid of dark tiles, several ringed in lime where an expected and actual check match, and one recessed hollow tile marking the check that failed, surrounded by shopping carts, pallets and a card reader

What Does Smoke Testing Actually Check?

What smoke testing is, why it runs first, and a worked four-check suite with an expected-vs-actual mismatch. Plus why smoke is a build property, not a list.

QA metrics dashboard visualization showing release quality signals including defect escape rate, mean-time-to-detect, and test coverage trends for engineering teams

Test Automation Metrics That Actually Predict Release Quality

Most QA dashboards track vanity metrics. These 6 QA metrics and software quality metrics actually predict release quality, with target thresholds for each.