Skip to main content
RunBook Academy

LinuxLXXXI · Incident CommandImpact assessment

Impact assessment - measuring what is broken for whom

Intermediate⏱ ~13 mincurljournalctl

What you'll learn

  • Assess impact across scope, depth, duration and reversibility
  • Measure impact from the service edge rather than from the failing component
  • Handle an incident whose impact is not yet known
  • Re-assess impact as it changes rather than declaring once

Prerequisites

Verified against Ubuntu 24.04 LTS · Debian 12 (Bookworm) · RHEL 9.x · Rocky Linux 9.x · AlmaLinux 9.x · Linux kernel 6.1 LTS / 6.6 LTS · systemd 255+ · OpenSSH 8.7p1 (RHEL 9) / 9.6p1 (Ubuntu 24.04) · nftables 1.0.x · chrony 4.x · Pacemaker 2.1.x · Corosync 3.1.x · 2026-08-11

Not yet marked complete on this device.

linux-incident-roles-and-communication gives the severity table and the rule that severity comes from observable impact. This lesson is about the step before that: establishing what the impact actually is, quickly and from evidence, so the severity you declare is a reading rather than a guess.

Severity is a decision. Impact is a measurement. Getting them the wrong way round — deciding the severity and then describing the impact to match — is how an incident acquires the wrong response in its first five minutes and keeps it for an hour.

Impact has four dimensions

Describing impact as a single adjective (“bad”, “major”) loses the information the response needs. Four questions, each with a different consequence:

DimensionThe questionWhy it changes the response
ScopeWho is affected, and how many of them?One customer, one region and everyone need different comms and different people
DepthCan they do nothing, or can they do it slowly?Degraded is survivable for hours; unavailable is not
DurationHow long so far, and how long projected?An outage that is recovering by itself is a different incident from one that is not
ReversibilityIs anything being lost that cannot be recreated?Data loss or corruption changes the priority from restore-fast to stop-the-writes

Reversibility is the one that gets left out and the one that overrides the others. An incident affecting 2% of users is a minor availability problem and a major incident if that 2% is silently having writes dropped. The question is not “how bad does this look” but “what will still be wrong after we fix it”.

Measure from the edge, not from the component

The most common assessment error is to measure impact where the fault is. The failing component tells you about itself; it does not tell you what users experience, and the relationship between the two is rarely obvious.

  • A failed replica in a three-node set is 100% broken and 0% impact.
  • A cache node lost is 0% broken by every health check and substantial impact, because the database behind it is now taking the full read load.
  • A load balancer removing an unhealthy backend is working correctly and may be the reason latency doubled.

Ask the question at the service boundary:

Read-only / Safewhat a user gets, from outside the platform
$ curl -sS -o /dev/null -w 'code=%{http_code} total=%{time_total}s\n' https://shop.example.com/checkout
code=503 total=0.184s

Illustrative output

One probe is an anecdote. A short loop turns it into a rate, which is what scope and depth are actually made of:

# Substitute your own values before running:
URL=https://shop.example.com/checkout

# 30 samples over 30 seconds, counted by status code
for i in $(seq 1 30); do
  curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 "$URL" || echo "timeout"
  sleep 1
done | sort | uniq -c | sort -rn
     22 503
      7 200
      1 timeout

That is a measurement you can declare from: roughly three requests in four are failing, and the failure is fast rather than a hang. If the ratio had been 1 in 30, the incident is a different one with a different severity.

Where the platform has proper telemetry, use it — a request-rate and error-rate graph at the edge answers this better than any loop. The loop is what you run when the dashboard is part of the outage, which happens more often than anyone plans for.

For a host-local service, count the errors the application is actually emitting rather than reading its status:

# Substitute your own values before running:
UNIT=checkout

# Error lines per minute over the last 15 minutes
journalctl -u "$UNIT" --since '-15 min' --utc -o short-iso -p err \
  | awk '{print substr($1,1,16)}' | uniq -c

When the impact is unknown

Sometimes you genuinely cannot tell yet: the monitoring is part of the outage, the affected system has no external probe, or the symptom is a data-integrity question that needs a query to answer.

The rule is simple and frequently ignored: unknown impact is treated as high impact, with a clock on resolving the unknown.

  1. Declare at the severity the worst plausible reading would justify, and say explicitly that it is provisional.
  2. Name one person and one question: who is establishing the actual impact, and by when. Ten minutes is a normal answer.
  3. Do not let the assessment become a background task. If the person assigned to measure impact gets pulled into the fix, the incident is now running blind and nobody has noticed.
  4. Re-declare as soon as the measurement exists, up or down, out loud, in the channel.

The failure mode this avoids is the incident that runs for forty minutes at SEV3 because nobody could confirm it was worse, and is retrospectively found to have been a SEV1 the whole time. The cost of an over-declaration is an apology. The cost of an under-declaration is the response you did not assemble.

Impact is not a single reading

Declaring impact once, at the start, is the second most common error. Impact moves, and it usually moves in one direction:

  • A queue backing up has small impact at minute two and total impact at minute forty, when the queue hits its bound and starts rejecting.
  • A disk filling has zero impact until it has complete impact, and the transition is not gradual.
  • A retry storm grows the impact of the original fault, so the incident gets worse while you work on it correctly.
  • A partial mitigation reduces impact without resolving the incident, and the reduction can hide a still-growing fault underneath.
# The projection matters more than the current value. Two samples
# ten minutes apart give a slope you can act on.
df -h /var/lib/postgresql
sleep 600
df -h /var/lib/postgresql

Attach a re-assessment to the update cadence you already have: if the severity requires an update every 30 minutes, the impact figure in that update is a fresh reading, not the one from the first update copied forward.

Writing the assessment down

Put it in the ticket in a fixed shape so the next reader, and the post-incident review, can find it:

IMPACT ASSESSMENT - INC-4820
Taken at:      2026-08-11T06:12Z    By: e.brandi
Scope:         All customers in the EU region (approx 40% of traffic)
Depth:         Checkout unavailable; browse and search unaffected
Duration:      Started 05:58Z per edge error rate; 14 min at time of writing
Reversibility: No data loss. Payment attempts rejected before authorisation;
               no partial transactions observed in the payment log.
Measured by:   Edge 5xx rate (grafana/checkout-edge), confirmed with a
               30-sample curl loop from outside the platform.
Confidence:    High on scope and depth. Reversibility checked for the
               payment path only; the order-history write path has NOT
               been checked.
Severity:      SEV1 (declared 06:14Z)

The Confidence line is what makes this an assessment rather than a claim. Naming the path you did not check is how somebody else knows to go and check it.

Knowledge check

Knowledge check · 5 questions

  1. Q1. A cache node has failed. Every health check on the remaining infrastructure is green, and latency at the edge has doubled. What is the impact?

  2. Q2. Which dimension of impact most often gets left out of the initial assessment?

  3. Q3. When the impact of an incident cannot yet be measured, it should be treated as high impact until a measurement exists.

  4. Q4. Error rate at the edge has fallen from 60% to 4% over ten minutes, with no change deployed. Which readings would confirm this is genuine recovery? Select all that apply.

  5. Q5. Why does the impact assessment include a `Confidence` line naming what was NOT checked?

Passing score: 75%. Answers are checked in this browser.