Deployment Verification Testing

Deployment verification is the testing done on an environment immediately after a new version is deployed to it, to confirm that the deployment worked and the new version behaves as expected with real configuration, real infrastructure and, in production, real traffic. Pre-release testing proves the build is good; deployment verification proves this deployment of it is good. They fail for different reasons — a missing environment variable, an unapplied migration, a wrong certificate, a load balancer still pointing at the old version — and none of those show up in a staging test run.

This guide walks through the work in the order it happens: writing the verification plan and rollback criteria before deploying, running post-deployment smoke tests, keeping synthetic checks running afterwards, verifying progressive rollouts such as canary releases and feature flags, reading monitoring signals, and validating a rollback — including the database migrations that can make rollback hard.

What deployment verification covers

A deployment changes more than code. It changes container images, configuration, secrets, database schema, infrastructure and routing, often in one step. Deployment verification checks the result of all of these together, in the target environment, with the question: is the new version running, correctly configured, reachable, and behaving at least as well as the previous one?

It helps to separate deploying from releasing. Deploying puts new code on servers; releasing exposes new behaviour to users. Techniques such as canary releases, blue-green switching and feature flags exist to separate the two, so a team can verify a deployment with little or no user exposure before releasing. The smoke suite is the same one described in the guide on smoke, sanity and regression testing, now pointed at the freshly deployed environment.

  • Version check — the environment serves the version that was meant to be deployed, on every instance.
  • Health and dependencies — services are up and can reach their databases, queues, caches and third parties.
  • Critical paths — login, the main business transaction and its API respond correctly.
  • Configuration and security — correct URLs, certificates, redirects and security headers; no debug mode.
  • Behaviour under real traffic — errors, latency and business metrics comparable with the previous version.

Decide success and rollback criteria before you deploy

The most important part of deployment verification happens before the deployment: writing down what “good” looks like and what will trigger a rollback. Criteria decided during an incident are decided under pressure, by whoever is awake, with a strong bias towards “give it five more minutes”. Criteria decided in advance turn the rollback into a routine step instead of an argument.

A plan fits on one page. It names the rollout steps, the people on call, the signals and thresholds that define success, the conditions under which the team rolls back without discussion, how the rollback is done and how it will be verified. The example below is for a service deployed as a canary; the thresholds are illustrations, and your own should come from the service’s normal baseline.

Release verification plan: orders-service 5.9.0 (example)
Deployment:   canary 5% -> 25% -> 100%, 15 min per step; flag new_checkout OFF at deploy
People:       release engineer + tester on call (named in the release ticket)
Before:       backup confirmed; migration 0042 is additive only (expand step)

Post-deploy smoke:  smoke.sh against the canary, then against the production URL

Success signals, canary compared with baseline, at every step:
  - HTTP 5xx rate           <= baseline + 0.5 percentage points
  - p95 latency             <= baseline x 1.2
  - checkout conversion     within 10% of baseline (same window)
  - no new error signatures in the logs

Rollback criteria (any one => roll back, no debate):
  - smoke failure on canary or production
  - 5xx rate above 2% for 5 consecutive minutes
  - payment failures above baseline x 2
  - data integrity alert (duplicate or missing orders)

Rollback method:    redeploy image 5.8.3; new_checkout stays OFF; migration 0042 is kept (additive)
Rollback verified:  smoke.sh passes and /version reports 5.8.3 on every instance
Done when:          100% of traffic for 1 hour with all signals green
The plan fixes success and rollback criteria before the deploy, so at every rollout step one failed criterion leads straight to a routine, verified rollback.
  1. 1Plan written before deployingSuccess signals, rollback criteria, release engineer + tester on call; backup confirmed; migration 0042 additive onlyBefore
  2. 2Deploy 5.9.0Flag new_checkout OFF at deploy
  3. 3Post-deploy smokesmoke.sh against the canary, then against the production URL

    Branch: Smoke failure on either → roll backFail

  4. 4Canary 5%15 minutes

    Branch: Any one rollback criterion → roll backFail

    Gate: All success signals green, compared with the baseline

  5. 525% of traffic15 minutes

    Branch: Any one rollback criterion → roll backFail

    Gate: All success signals green, compared with the baseline

  6. 6100% of trafficWatched for 1 hour against the same signals

    Branch: Any one rollback criterion → roll backFail

Throughout steps 4–6 Success signals: 5xx ≤ baseline + 0.5 percentage points, p95 ≤ baseline × 1.2, checkout conversion within 10% of baseline (same window), no new error signatures

Then:Done: 100% of traffic for 1 hour with all signals green

Outside the sequence
  • Rollback criteria: any one → roll back, no debateSmoke failure; 5xx above 2% for 5 consecutive minutes; payment failures above baseline × 2; data integrity alert (duplicate or missing orders)
  • Rollback: redeploy image 5.8.3new_checkout stays OFF, migration 0042 is kept; verified when smoke.sh passes and /version reports 5.8.3 on every instance

Example plan for orders-service 5.9.0: the thresholds are illustrations; derive yours from your service’s normal baseline.

Post-deployment smoke tests

Run the smoke suite as the last step of the deployment job, against the environment just deployed, and make the pipeline fail if it fails. Keep it short (a few minutes), independent of test data that may not exist in production, and safe to run against production: read-only calls, or writes made with a dedicated test account whose data is excluded from reports and billing. Check negative behaviour too — a protected endpoint that suddenly returns 200 without a token is a deployment defect.

The script below is an example of the simplest useful form: HTTP checks with explicit expected status codes and a version check. Most teams later move the same checks into their API or UI test framework so that results are published in the same report format as other tests.

  • Hit every instance or region if you can, not just the load balancer — a single stale instance is a classic partial-deployment defect.
  • Bypass caches for at least one check; a CDN can serve a healthy-looking cached page while the origin returns errors.
  • Make the health endpoint meaningful: it should report dependency status, not just return 200 because the process is alive.
  • Check security headers, TLS and redirects after infrastructure changes; they are configured outside the code and are easy to lose.
#!/usr/bin/env bash
# Example post-deployment smoke script. Usage: ./smoke.sh https://staging.example.com
set -euo pipefail
BASE_URL="$1"
EXPECTED_VERSION="${EXPECTED_VERSION:-}"

check() {  # name, path, expected HTTP status
  local name="$1" path="$2" expected="$3" status
  status=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$BASE_URL$path" || true)
  if [ "$status" != "$expected" ]; then
    echo "FAIL $name: $path returned $status, expected $expected"
    exit 1
  fi
  echo "ok   $name ($status)"
}

check "health"            "/health"                200
check "home page"         "/"                      200
check "product API"       "/api/v1/products/1001"  200
check "auth still needed" "/api/v1/orders"         401

# Only if the service exposes its version
if [ -n "$EXPECTED_VERSION" ]; then
  deployed=$(curl -s --max-time 10 "$BASE_URL/version" || true)
  if [ "$deployed" != "$EXPECTED_VERSION" ]; then
    echo "FAIL version: got $deployed, expected $EXPECTED_VERSION"
    exit 1
  fi
  echo "ok   version ($deployed)"
fi

Try it: API Health Checker Try it: API Endpoint Tester Try it: Security Header Analyzer Try it: Redirect Checker

Synthetic checks after the deployment

A smoke test runs once; synthetic monitoring keeps running. Synthetic checks are scripted transactions — load the home page, log in with a monitoring account, search, add to cart, call a key API — executed on a schedule from outside the system, every few minutes, with alerts on failure or slowness. They catch problems that appear some time after a deployment: a memory leak, an expiring certificate, a scheduled job that breaks a cache, a third party that changed its behaviour.

Treat synthetic checks as tests: keep them in version control, review them with each feature change, give them dedicated test accounts and data, and make sure a failure reaches a person. A synthetic check that has been failing quietly for a week is worse than none, because it creates the impression of coverage. When you write the schedule as a cron expression, check it and its next run times before relying on it.

Try it: Cron Expression Generator Try it: Cron Expression Explainer Try it: Response Time Analyzer

Canary releases, blue-green and feature flags

Progressive delivery exposes a change to a growing share of traffic, with a check at each step. In a canary release, the new version first receives a small share of traffic — a few percent, or internal users — and its behaviour is compared with the baseline running the old version before the share is increased. Google’s SRE workbook describes canarying as comparing the canary population against a control, which is the key point for testers: compare like with like, over the same time window, not the canary against yesterday’s whole fleet.

Blue-green deployment keeps two identical environments; the new version is deployed to the idle one, verified there with the smoke suite, and traffic is switched over, with the old environment kept ready for an immediate switch back. Feature flags separate release from deployment inside the code: new behaviour ships switched off, is enabled for internal users, then for a percentage of customers, and can be switched off without a redeploy.

  • Test both flag states, and the transition between them for users in the middle of a flow (a cart created with the flag off, checked out with it on).
  • Verify targeting: the flag is on exactly for the intended users, regions or percentage, and off for everyone else.
  • Run the smoke suite against the canary or the idle environment directly, before any real traffic reaches it.
  • Keep both versions compatible during the rollout: APIs, message formats and database schema must work with old and new code at the same time.
  • Remove flags after full release; long-lived flags multiply the combinations to test.

Try it: API Response Comparator

Monitoring signals to watch

During and after a rollout, verification relies on production signals rather than test results. The Google SRE book’s four golden signals are a sensible minimum: latency, traffic, errors and saturation. Add business signals, because many deployment defects produce no errors at all — orders simply stop, or totals are wrong. Compare each signal with the baseline for the same period and look for step changes that line up with the deployment time.

  • Errors — HTTP 5xx rate, failed jobs, client-side JavaScript errors, new error messages that did not exist before the deployment.
  • Latency — p95 and p99 of key endpoints, not only the average; slow successful requests are still a regression.
  • Traffic — sudden drops can mean users cannot reach a feature; sudden rises can mean retry storms.
  • Saturation — CPU, memory, connection pools, queue depth; a slow leak shows here hours after a clean smoke test.
  • Business — sign-ups, logins, checkouts, payments, messages sent, compared with the same hour on previous days.
  • Delivery health over time — change fail rate and failed deployment recovery time, two of the DORA metrics, show whether deployment verification and rollback are working across many releases.

Try it: Response Time Analyzer

Rollback and release validation

A rollback is itself a deployment and must be verified the same way: run the smoke suite again and confirm the version endpoint reports the previous version on every instance. Rehearse the rollback on staging for any release that changes infrastructure or data, and time it — a rollback that takes an hour is not a safety net for a defect that costs money every minute. Sometimes a forward fix is faster and safer than a rollback; decide which applies in the plan, not during the incident.

Database migrations are what most often make rollback hard. Once a migration drops a column, renames a table or rewrites data, the previous version of the code may no longer run against the new schema, and reversing the migration may lose data written since the deployment. The common mitigation is the expand-and-contract approach: first add new structures in a backward-compatible way, deploy code that works with both, migrate data, and only in a later release remove the old structures. Testing migrations — on a production-sized copy, with old code against the new schema, and with measurement of locks and duration — is covered in the guide on database transactions and migrations testing.

  • Rollback criteria written before the deployment, with numeric thresholds and a named decision owner.
  • Rollback procedure rehearsed and timed; the artefact of the previous version still available.
  • Old code tested against the new schema whenever a migration ships with the release.
  • Destructive migration steps (drop, rename, type change) shipped in a later release than the code that stops using them.
  • Rollback verified by the same smoke suite and version check as the deployment.

Typical deployment defects

  • Production returns 5.8.3 on two of six instances after deploying 5.9.0 (partial rollout).
  • Health endpoint returns 200 while the database connection pool is exhausted.
  • Smoke test passes against a cached CDN page while the origin returns 502.
  • GET /api/v1/orders returns 200 without a token after gateway configuration change.
  • Strict-Transport-Security header missing on the new load balancer.
  • Canary shows three times the baseline 5xx rate on POST /orders for users with saved cards.
  • Flag new_checkout enabled for 5% also shows the new flow to logged-out visitors.
  • Rollback to 5.8.3 fails: old code cannot read orders with the new status PENDING_REVIEW.
  • Synthetic login check failing for six days because its test account password expired.

Deployment verification checklist

  • Verification plan written: rollout steps, success signals, rollback criteria, owners.
  • Migrations reviewed for backward compatibility; old code tested against the new schema.
  • Post-deployment smoke suite runs automatically and fails the pipeline on failure.
  • Version confirmed on every instance or region.
  • Security headers, TLS and redirects checked after infrastructure changes.
  • Canary or idle environment verified before real traffic; compared with baseline at each step.
  • Feature flags tested in both states and for correct targeting.
  • Golden signals and business signals watched for the agreed period.
  • Rollback rehearsed, timed and verified with the same smoke suite.
  • Synthetic checks updated for the new behaviour and alerting a real person.

Frequently asked questions

What is the difference between deployment verification and release testing?

Release testing, such as the regression suite on a release candidate, shows that the build is good. Deployment verification shows that this particular deployment of the build works in its target environment, with its real configuration, infrastructure and traffic. Both are needed, and they catch different defects.

Is it safe to run smoke tests in production?

Yes, if they are designed for it: read-only checks where possible, and writes only through dedicated test accounts whose data is excluded from reporting, billing and communications. Never use real customer accounts or trigger real payments or messages.

What is a canary release?

A deployment in which the new version first receives a small share of traffic, and its errors, latency and business signals are compared with the old version running alongside it. If the canary is healthy, the share grows step by step; if not, it is rolled back with limited user impact.

When should we roll back instead of fixing forward?

When the rollback criteria agreed before the deployment are met and a rollback is known to be safe and fast. A forward fix can be better when rollback is blocked, for example by a data migration, or when the fix is small and can be deployed faster than the rollback. Decide which applies in the plan.

Why do database migrations make rollback hard?

Because the previous code may not work with the changed schema, and reversing a migration can lose data written after the deployment. The expand-and-contract approach avoids this by making each schema change backward compatible and removing old structures only in a later release.

Are synthetic checks a replacement for real monitoring?

No. Synthetic checks tell you whether scripted journeys work from outside; real-user monitoring, logs and metrics tell you what is happening to actual traffic. Use both: synthetic checks catch outages on paths with little traffic, real monitoring catches problems your scripts do not cover.

References

Practice exercise

Review a verification plan, then read the canary

Your task

You are the tester on call for an online bus-ticket booking platform (fictional). Release 7.4.0 of the bookings service goes to production on Thursday as a canary. It adds seat selection behind a feature flag, ships two database migrations and moves the service to a new load balancer. The release engineer has written a one-page verification plan and asked you to review it before the deployment. The material below gives the change list, the service’s baseline, the draft plan and, further down, the readout from the first canary step.

Work on paper in two passes. First, correct the plan before the deployment with the guide’s plan, smoke and rollback sections: numeric criteria from the baseline, a smoke suite that fits this release, and a rollback that will actually work. Then read the 10:25 readout against your criteria and decide what happens next. A percentage calculator helps with the thresholds. Allow 20–30 minutes.

Material
Online bus-ticket booking platform (fictional) - bookings-service
Release 7.4.0 replaces 7.3.2. Deployment: Thu 15 Oct 2026, 10:00.
Topology: 6 instances behind a load balancer; a CDN in front of the web pages.
  Canary: 2 extra instances run 7.4.0 and get a weighted share of traffic.
People:release engineer and rollback decision owner: Tariq | tester on call: you
        support lead: Lama

What changes in 7.4.0
  - Seat selection on the booking page, behind feature flag seat_map.
    OFF at deploy; later: staff accounts -> 10% of customers -> 100%.
  - Migration 0131: add nullable column bookings.seat_number.
  - Migration 0132: rename column bookings.status to bookings.state
    (7.4.0 reads and writes state; 7.3.2 reads and writes status).
  - New load balancer with a new TLS certificate; HTTP -> HTTPS redirect reconfigured.

Baseline: last 14 days, same weekday and hour, from the dashboards
  HTTP 5xx rate                                  0.2%
  p95 latency, POST /api/v2/bookings             480 ms
  booking completion rate (started -> paid)      62%
  payment failure rate                           1.0%

Draft verification plan (written by Tariq, for your review)
  Rollout:    canary 5% -> 25% -> 100%, 20 min per step
  Smoke:      run smoke.sh by hand after the deploy job
              (health, home page, trips API, auth 401, version)
  Success:    no serious errors, site feels fast
  Rollback:   if it looks bad, redeploy 7.3.2 and revert the migrations
  Done when:  the deployment job is green

Readout at 10:25 - canary at 5% for 20 min; migration 0131 applied
  Agreed at the plan review: 0132 held back; this 7.4.0 build still uses status.
  Signal                                   Canary 7.4.0    Control 7.3.2
  HTTP 5xx rate                            0.2%            0.2%
  p95 latency, POST /api/v2/bookings       610 ms          470 ms
  average latency, POST /api/v2/bookings   210 ms          200 ms
  booking completion rate                  41%             61%
  payment failure rate                     1.0%            0.9%
  new error signatures in the logs         none            -
  smoke.sh against the canary instances    all ok, version 7.4.0
  10:18 ticket from Lama: a customer who is not logged in sees a seat map
  on the booking page and cannot continue to payment.
Steps
  1. Rewrite the draft’s success signals and rollback criteria as numeric thresholds derived from the baseline, with the comparison method (canary against control, same time window) and the owner of the rollback decision.
  2. Correct the smoke line: where and when the post-deployment smoke suite runs, which checks it must contain for this release in particular, and how it fails the pipeline.
  3. Review the two migrations against the rollback line: can 7.3.2 be redeployed once 0132 has run? What do you change in the release or in the rollback method? Then rewrite the "Rollback" and "Done when" lines.
  4. Read the 10:25 readout against your criteria: for each signal say whether it passes, and explain what the average latency and the equal 5xx rate do and do not tell you. What does the support ticket say about the flag?
  5. Decide: increase to 25%, hold, or roll back — and write what happens next: the rollback steps and their verification, what is recorded, and the defects to raise.
Show the model answer
Model answer

Plan review, criteria. "No serious errors" and "site feels fast" cannot be checked by anyone at 10:25, so replace them with numbers derived from the baseline and state how they are compared: canary against the control running 7.3.2, over the same 20-minute window, at every step — not against yesterday’s whole fleet. Success signals: HTTP 5xx rate at most control + 0.5 percentage points (0.7% against this baseline); p95 latency of POST /api/v2/bookings at most 1.2 × control (576 ms against the 480 ms baseline); booking completion rate at least 90% of the control’s rate (about 56% with the 62% baseline); payment failure rate at most 1.5 × control; no new error signatures in the logs. Rollback criteria, any one of which means roll back without discussion: smoke failure on the canary or on production; 5xx rate above 2% for 5 consecutive minutes; booking completion rate more than 10% below control for a whole step; payment failure rate above 2 × control; a data integrity alert (missing or duplicate bookings, one seat sold twice). Name the people: Tariq owns the rollback decision, you run the smoke suite and read the signals at each step, and the thresholds are written in the release ticket before 10:00. The exact numbers are a judgement; what is not negotiable is that they exist, come from this service’s baseline and are agreed before the deployment.

Plan review, smoke. Running smoke.sh by hand after the job means it can be forgotten under pressure, runs after traffic has already arrived, and cannot fail the pipeline. Make the smoke suite the last automated step of the deployment job, run first against the canary instances directly (a check through the load balancer at 5% mostly reaches 7.3.2), then against production after every step, and failing the job if any check fails. For this release it must contain: GET /health returns 200 and the health endpoint reports its dependencies (database, payment provider); the home page with the cache bypassed, so the origin is checked and not a CDN copy; the trips API (GET /api/v2/trips for a route that runs every day) returns 200 with a non-empty list, rather than a fixed trip id that may already have departed; GET /api/v2/bookings without a token returns 401, the negative check that catches a gateway that stopped enforcing authentication; /version returns 7.4.0 on each canary instance, and at 100% on every one of the six instances, not a single call through the load balancer; and, because the load balancer and certificate changed, the TLS certificate is valid for the domain, http:// redirects to https:// on the same path with a 301 or 308, and the security headers present on the old load balancer, including Strict-Transport-Security, are present on the new one. Add a flag-state check: with seat_map OFF, the booking page contains no seat map, requested both without a session and with the test account. Writes, if any, only through the dedicated test account whose bookings are excluded from reports and payments.

Plan review, migrations and rollback. Migration 0131 adds a nullable column: additive, 7.3.2 ignores it, so it stays in place on rollback and needs no special handling. Migration 0132 renames bookings.status to bookings.state, and that breaks the plan twice. First, no canary can work with it: while the canary runs, the control still runs 7.3.2 and reads status, so the moment 0132 runs 95% of traffic fails; and if 0132 does not run, 7.4.0 reads a state column that does not exist. Second, "redeploy 7.3.2 and revert the migrations" is not a rollback method: renaming the column back during an incident, under load, breaks whichever version is still running, and it is a down-migration nobody has ever run, executed at the worst possible moment. The fix is expand-and-contract: 7.4.0 is changed to keep using status and ships without 0132; if the new name is really needed, a later release adds state as a new column, writes both and keeps reading status, a backfill copies the existing values, the next release reads state, and only a release that comes after the code has stopped using status drops it. Before any release that carries a migration, the old code is tested against the new schema on staging. Rewrite the lines. Rollback: while the canary is below 100%, set its traffic weight to 0; at 100%, redeploy image 7.3.2 to all six instances; keep 0131; seat_map stays OFF; rehearsed and timed on staging, target under 10 minutes; verified when the smoke suite passes and /version reports 7.3.2 on every instance that receives traffic. Done when: 100% of traffic for 1 hour with every success signal green and the flag still OFF; a green deployment job only proves that the job finished. The flag rollout (staff, 10%, 100%) is a separate release decision with its own criteria and its own readouts.

Reading the readout. First check the control against the baseline: 0.2%, 470 ms, 61% and 0.9% are normal for this hour, so the comparison is valid. 5xx rate 0.2% against 0.2%: passes. p95 610 ms against 470 ms: 1.30 × control, above the 1.2 × limit of 564 ms; the success signal fails. Average latency 210 against 200 ms would pass, which is exactly why the average is not a criterion: 5% of slow requests barely move the mean while every one of those customers waits. Booking completion rate 41% against 61%: a third fewer bookings, far below the 10% floor of 54.9%; a rollback criterion is met. Payment failure rate 1.0% against 0.9%: within 1.5 × control, passes. No new error signatures: passes. The equal 5xx rate and the clean logs show the point of business signals: this defect produces no errors at all; customers simply stop before payment. On errors alone the canary would have been promoted to 25%.

The ticket. The plan says seat_map is OFF at deploy, for everyone. A customer who is not logged in sees the seat map, so the flag is being evaluated as ON at least for sessions without a user — a targeting defect of the kind the guide lists — and the new behaviour is reaching real customers on the canary while the release says it is not released. It explains the completion drop: the seat map blocks the path to payment. It may also be behind the p95 rise of POST /api/v2/bookings if the seat-map code path runs on those requests, but that is a hypothesis for the root-cause analysis, not a finding. The smoke suite did not see it because none of its checks loads the booking page as a logged-out session; the flag-state check from step 2 would have caught it before any traffic.

Decision: roll back now, not hold. A rollback criterion is met at the end of the first step, so the agreed answer is a rollback without discussion: you give Tariq, the decision owner, the criterion that fired and the readout, and he calls the rollback; the criteria agreed before 10:00 are what make this a routine call instead of a debate. Steps: set the canary weight to 0 so all traffic returns to the six 7.3.2 instances, then take the two canary instances out of service; keep migration 0131; seat_map stays OFF; run the smoke suite against each of the six instances and confirm /version reports 7.3.2 on all of them and that no traffic reaches 7.4.0; watch the same signals for the next 20 minutes and confirm the completion rate is back around 61%. Record the time of the decision, the criterion that fired, who decided, and how long the rollback took, because that number is what the plan promised. A forward fix is discussed after the rollback, with the root cause known, not instead of it.

Defects and follow-up. Reproduce the ticket on staging with 7.4.0 and the flag OFF, logged out and logged in, so that the title states exactly who is affected. Then raise two defects with the canary evidence attached: flag seat_map evaluated as ON for logged-out sessions (or for whichever sessions the reproduction shows), Critical, since it blocks the main booking path, with the ticket, the time window and the canary instance ids; and p95 of POST /api/v2/bookings 1.3 × control on 7.4.0, linked to the first until the root cause shows whether it is the same defect. Before the next attempt: the fix passes confirmation testing on staging, the flag-state check and the load balancer checks join the smoke suite, a synthetic check of the booking path asserts that no seat map appears while the flag is OFF and its alert reaches a person, and the canary is run again from 5% with the same criteria. Note what went right: the plan’s thresholds turned a 20-minute canary into a routine rollback with 5% of customers affected instead of all of them.

If your numbers differ, check the rules rather than the numbers: every criterion is numeric, comes from this service’s baseline, is compared canary against control over the same window, and is agreed before 10:00 with a named decision owner; the smoke suite runs automatically, directly against the instances, with a version check, a negative check and the checks that this release’s infrastructure change makes necessary; destructive migrations never ship with the code that stops using them; and a rollback is verified like a deployment. A stricter latency limit or a different completion floor is fine with a reason; "it looks bad" is not.

Your progress on this topic

Part of the QA Roadmap

Tools mentioned in this guide

Check several API health endpoints at once and get status, latency and a pass/fail summary.

API Testing

Quickly check that an API endpoint is reachable: status, response time, size, content type and TLS.

API Testing

Measure an endpoint's response time over several samples: min, max, average, median and p95.

Performance

Compare two API responses (e.g. staging vs production) and list every structural and value difference.

API Testing

Grade HTTP security headers (CSP, HSTS, X-Frame-Options, Referrer-Policy, Permissions-Policy, COOP/CORP) from pasted headers or a public URL.

Validation

Trace redirect chains (301/302/307/308) and see every hop, status and final URL.

Web

How Mutqan Soft can help

More guides

More guides