On Call Journal

Smoke Testing in Production After Deployment

Staging never replicates production, so smoke tests run post-deploy catch what CI and QA miss.

Correspondent · · 12 min read
Cover illustration for “Smoke Testing in Production After Deployment”
CI Confidence Versus Production Reality · August 19, 2026 · 12 min read · 2,702 words

Staging environments approximate production but never quite replicate it, and that gap is the entire reason smoke testing in production exists. It belongs in engineering infrastructure, and teams that treat it as a leftover QA ritual bolted onto the end of a pipeline are the ones who end up finding out about a broken checkout flow from a customer instead of a dashboard.

Real users don't behave like test scripts. They show up with concurrent load patterns nobody modeled, edge-case data that never made it into a staging fixture, and browser and device combinations that only surface once traffic is real. Live infrastructure makes this worse. DNS resolution, CDN caching, secrets management, third-party API rate limits: none of it behaves the way it will in production until it actually is production. Staging can approximate these systems, but the approximation breaks down exactly where you need it not to. Production databases drift in ways a snapshot never captures either; schema quirks pile up, orphaned records accumulate, and data volume reaches a scale the staging copy was never sized for. A staging database can pass every check while the production copy, far heavier with years of accumulated rows, chokes on a query that was never slow anywhere else.

So the moment a deployment lands is the first moment anyone gets a real answer. CI passing tells you the build compiled and the unit tests held under controlled conditions. It doesn't tell you whether a real user can log in, finish a purchase, or reach the API endpoint three other services depend on. Every minute between deployment and the first verified signal is a window where nobody actually knows what's true, and that window has a price tag. Anbosoft's 2025 guide puts it at up to 80% more expensive to fix an issue after deployment than to catch it earlier in testing. I went back and forth on whether that number was just a scare figure, but it tracks with what anyone who's chased a production bug at midnight already knows in their gut: the cost isn't just the fix, it's every person pulled off other work while the fix happens.

Diagram: The True Cost of Finding Bugs Late. Visualizes: Show the cost escalation of fixing an issue at three stages: before deployment (baseline), after deployment (up to 80% more expensive per Anbosoft's 2025 guide), and during a significant…

What smoke testing in production actually is, and what it gets mistaken for

A production smoke test is a narrow, fast set of checks run against the most critical paths of a live system right after a deployment lands. The goal is a yes-or-no answer: did this deployment land in a working state? Usually that means login, core transactions, the handful of API endpoints everything else leans on, health-check routes, and whatever third-party integration would take the product down if it quietly failed.

The term gets stretched to cover things it was never meant to cover, so it's worth drawing the lines. Regression suites test the full surface area of an app; a smoke test touches only the highest-stakes slice of it. Load tests push volume until something buckles; smoke tests run at low volume just to check that things function at all. Synthetic monitors fire on a schedule, continuously, whether or not anything changed, while a smoke test fires because a deployment happened, full stop. Telemetry differs in a related way: a smoke test is an active probe asking a direct question, while telemetry is the passive record of what the system was doing whether or not anyone asked. It took me a while to see why this distinction matters rather than feeling like semantics: mixing these up is how blind spots form, because each one structurally cannot catch what the others catch.

The deployment trigger really is the defining feature, once you sit with it long enough. Inside a delivery pipeline, that gives smoke testing its own slot: unit and integration tests run pre-merge in CI, staging checks run post-merge but pre-production, and smoke tests run post-deploy, against production itself. That last slot is the one this piece is about, and it's the only one where the system under test is the one real users are already touching.

Table: What Production Smoke Testing Is — and Isn't. Compares Trigger, Coverage, Primary Question and Mode by Smoke Testing, Regression Suites, Load Testing and Synthetic Monitoring.

Which paths and signals a production smoke test should actually cover

Pick the paths where failure would be immediately visible to users or would take down the whole reason the product exists. Login sits at the top; it's the door to everything else, and if authentication breaks, nothing downstream matters anyway. After that come checkout, form submission, data retrieval, payment flow, whatever transaction actually generates revenue or fulfills the core promise. Critical API endpoints belong here too, especially the ones other services lean on with little tolerance for downtime. Background job triggers deserve a check as well: a queue that silently stops accepting work can fail for hours before anyone notices anything is wrong. Third-party handshakes, payment gateways, identity providers, messaging services, need their own verification, since those are dependencies you don't control and can't assume are stable just because your own code shipped clean.

Paths are half the picture. Signals matter just as much. Check HTTP status codes: 2xx on routes that should succeed, no 4xx or 5xx on routes that were healthy before the deploy. Check response time against a threshold, because a request that eventually completes but takes four times as long as it used to is still a regression, even if it technically passed. Read that alongside error rates in real telemetry too. A smoke test that passes green while the 500 rate climbs in the logs is a contradiction, not a checkmark to move past. And where you can, spot-check data integrity: does a record created during the test actually show up in the database, or in whatever downstream cache is supposed to pick it up?

What gets left out matters just as much as what's included. Edge-case flows, rarely used features, performance benchmarking, all belong somewhere, just not here. They belong in regression suites and load tests, on their own schedule, with their own tolerance for runtime. A narrow smoke suite is a fast one, and speed is what keeps the signal-to-noise ratio high. Anbosoft's 2025 guide notes that abandonment rates for poorly functioning apps can exceed 70%, which settles what could otherwise be an endless argument over scope: pick the flows that, if broken, send people out the door immediately rather than the ones that merely annoy them.

How to run smoke tests in production without creating new risk

There's a real tension buried in the phrase "testing in production," and it's worth sitting with rather than waving away. A test that probes real infrastructure is, by definition, capable of producing real side effects. A smoke test that submits an order, fires a confirmation email, or charges a card can't run blind against live systems without someone first thinking through what happens on the other end of that request.

The standard fix is a dedicated test account, walled off from analytics and billing, so its activity never pollutes real user metrics or triggers a real charge. Favor read operations and idempotent writes wherever you can; that's the kind of request you can fire twice without creating duplicate side effects. Flows that aren't idempotent, the ones where running the test twice might double-charge a customer or send two emails, should be flagged for manual gating instead of running automatically. Feature flags add another layer: run the smoke suite against a canary slice of traffic before the rollout reaches everyone, and gate execution to that flagged cohort until it clears.

Canary deployments, in my experience, come close to the ideal setup for this. A widely cited deployment checklist heuristic from octopus.com holds that if the canary's 500-level error rate spikes past 5%, the smoke suite should trigger an automated rollback before the rollout ever widens to the rest of the fleet. Small, contained blast radius, room to fail safely; that's the whole point of running one.

Isolation needs to run down into the infrastructure layer too. Tag smoke-test-originated requests separately in telemetry so they can be filtered out of production dashboards; nobody wants to burn an afternoon debugging a traffic spike that turns out to be the smoke suite talking to itself. Skip real billing or notification systems wherever a sandbox mode exists, and use it. Speed matters as much as safety here: a smoke suite that takes fifteen minutes to return a verdict has already lost most of its value as a fast gate. Aim for a pass or fail signal within a few minutes, parallelized wherever checks don't depend on strict ordering, serialized only where that order dependency is real.

Connecting smoke test results to production telemetry

A smoke test that passes in isolation while telemetry shows the system degrading only gives you half a picture. The test verified one path at one moment; telemetry reports what the system is doing continuously, under the load real users are generating right now. A confident verdict needs both. Neither one alone is enough.

What should get checked against the result? Error rate trends in the minutes right after deployment, not just the single instant the smoke test happened to run. Latency at the p95 and p99, because those tell a very different story than a mean response time that hides a long tail of suffering underneath it. Log anomalies tied to the deployed service, including errors in downstream spans the smoke test never directly touched but that show up anyway once real traffic starts flowing through the new code.

This is where change observability earns its keep as a concept, and it took a few false starts to see why it deserves its own name rather than folding into "monitoring." If a service deployed at a specific minute and latency degraded a minute later, the deployment is the leading suspect, full stop, no further debate needed. Mohit Karekar has made this case laying out software change observability as its own discipline: OpenTelemetry spans and traces let a team walk a latency regression back to a specific upstream service and a specific deploy, turning "something feels slow" into an attributable cause. That's the difference between a two-hour investigation and a two-minute one.

There's a quieter failure mode underneath all of this. A smoke test can't catch what has no telemetry behind it. Services that aren't emitting logs, metrics, or traces create blind spots a smoke suite will sail straight through without noticing anything is wrong. Closing that gap means checking instrumentation before code merges, confirming telemetry output is valid as part of the PR process rather than discovering the hole after an incident already happened. It also means treating observability itself as code: version-controlled dashboards, alert thresholds, and metric definitions applied the same way across services, so a smoke test result always has a stable baseline to check against instead of a moving target.

Automating the response when a smoke test fails

A smoke test failure right after deployment comes with an obvious suspect already attached: whatever just shipped. That tight coupling between signal and cause is what makes post-deploy smoke failures some of the most actionable signals anywhere in an engineering workflow.

Automated rollback should be the first response, not the third or fourth. If the deployment strategy is canary or blue/green and the smoke suite fails, rollback restores the previous known-good state before the failure reaches most users, and it should be triggered by the same system that ran the smoke test in the first place. No waiting on a human to read an alert, understand it, and decide to act.

Automation can also kill the cold 2 a.m. page before it ruins anyone's night, and anyone who has been that page knows exactly what that's worth. The failure already contains the answer to the three questions an engineer would otherwise spend twenty minutes reconstructing by hand: which path failed, what the actual error was, which deployment triggered it. That context should travel with the incident instead of getting stitched together across four tools and a Slack thread full of guesses. A fix PR opened automatically against the failing code, pre-populated with the failure context, gets a team to resolution faster than any war room.

The economics aren't subtle here. Uptime Institute's Annual Outage Analysis found that 54% of significant outages cost over $100,000, and roughly one in six top $1 million. IBM's 2025 Cost of a Data Breach Report found organizations using AI and automation in incident response cut breach-related costs from $5.52 million down to $3.62 million, a $1.9 million gap, while shaving 80 days off the breach lifecycle. Automated response is a line item that pays for itself at that point. Tooling that works this exact gap checks every PR against real telemetry once it deploys, catches what the smoke suite surfaces, and opens a fix PR that lands right alongside the alerts already hitting an on-call engineer's queue.

Alert fatigue and why smoke test failures have to be high-signal by design

A smoke suite that cries wolf teaches engineers to ignore it. That's the predictable outcome of flaky tests, coverage that's too broad, and assertions specific enough to fail on noise but not specific enough to mean anything when they do. rootly.com's research found 47% of SRE teams acknowledge significant room for improvement in their incident management processes, and a poorly scoped smoke suite is a direct contributor to that number.

Alert fatigue starts as a tooling problem. It only becomes an engineer problem once the signal-to-noise ratio degrades far enough that triage gets hard no matter how diligent any one person is. A single underlying failure can trigger dozens of related notifications at once, and AI-powered grouping that consolidates that flood into one actionable incident is increasingly adopted for exactly this reason.

Keeping a smoke suite worth trusting takes ongoing curation, not a one-time setup. Tests that haven't caught a real regression in a reasonable stretch of time are candidates for the chopping block; they aren't earning their runtime. Assertions need to check more than a bare HTTP 200, since a test that never inspects response content sails right past failures that matter. And after every incident, the suite deserves a look back: did it catch the failure, or did the failure reach users first? Reaching users first is itself the finding, and it usually means a gap in coverage nobody had flagged yet.

There's a human cost tucked into all of this too. High-noise alert environments are a well-documented driver of burnout and turnover among the engineers stuck living inside them; the same tooling failure that degrades incident response also wears down the people responsible for it. A smoke suite scoped tightly to the paths that actually matter, tied to telemetry that confirms rather than contradicts it, ends up doubling as a noise-reduction intervention on top of its job as a testing practice.

Smoke testing when AI agents are doing the shipping

Agentic development changes the math on every deployment, because AI agents can now generate, commit, and ship code on a timeline no human review cycle was built to match. The code these agents produce is often syntactically clean and fully CI-passing while carrying semantic regressions subtle enough that nothing catches them until real usage exposes the gap between "compiles" and "works."

Safety documentation across the agent ecosystem is thin, and that's being generous. The 2025 AI Agent Index found that 25 of 30 surveyed agents disclose no internal safety results at all, and 23 of 30 have no third-party testing information published anywhere. Sandboxing or VM isolation, a fairly basic containment measure, is documented for only 9 of the 30. Most agents shipping code right now come with no public evidence of how they behave when something breaks.

Production smoke testing offers a safeguard that doesn't depend on knowing anything about an agent's internal reasoning, and that's exactly its value here. It doesn't matter how the code got written, or by what, or how it reasoned its way there. What matters is whether it works against real infrastructure, real data, and real traffic, the same three things staging could never fully replicate to begin with. As more of the code reaching production skips human review entirely, the post-deploy smoke test carries more of the weight alone, until it becomes the last check standing before a user finds the problem first.

Diagram: AI Agents Ship Code With Almost No Safety Disclosures. Visualizes: Visualise the safety transparency gap across 30 surveyed AI agents from the 2025 AI Agent Index: 25 of 30 disclose no internal safety results; 23 of 30 have no third-party…

Sources

  1. anbosoft.net

More in CI Confidence Versus Production Reality