Team meeting at a wooden table: a person gestures while explaining, with a laptop and a notebook with a phone on it.
7 min read

Incident Management Best Practices for Dev Teams

When the site goes down, most small teams improvise: three people debug the same thing, nobody tells customers, and a week later the same outage happens again. A lightweight incident process fixes all three without adding bureaucracy. This guide gives you the roles, severity levels, communication cadence and post-mortem template that work for teams of two to twenty, plus the follow-through step that most teams skip.

What counts as an incident

An incident is any unplanned event that degrades the service for users and needs a coordinated response. A monitoring alert is a signal; it becomes an incident when a person confirms the impact and decides it needs handling. Making that call explicit matters: someone says "this is an incident, I'm declaring it" in the incident channel, and the process starts. Declaring an incident that turns out to be minor costs a few minutes. Failing to declare one that turns out to be major costs much more.

Roles: who does what

Even with two people, separate the roles. One person cannot both debug deeply and keep everyone informed.

RoleResponsibilitiesDoes not
Incident commander (IC)Owns the incident end to end: sets severity, assigns work, decides on rollbacks, calls in help, declares it resolvedDebug hands-on (unless the team is one person)
Communications leadPosts status-page and customer updates on schedule, answers support and management, keeps the timelineMake technical decisions
RespondersInvestigate and fix, report findings to the ICChange production without telling the IC
Scribe (optional)Records timestamps, actions and decisionsAnything else; on small teams the comms lead does this

The IC is a role, not a rank. The first responder is IC by default until they hand it over explicitly ("Alex, you're IC now"). On a two-person team, one person is IC plus comms, the other is responder.

Severity levels

Severity drives who is woken up, how often you communicate and whether a post-mortem is required. Keep it to three or four levels and define them by user impact, not by technical cause.

LevelDefinitionExampleResponseUpdate cadencePost-mortem
SEV1Service down or core function broken for most users; data loss or security exposureSite returns 5xx for everyone; checkout failsAll hands, immediately, any hourEvery 30 minRequired
SEV2Major feature broken or severe slowdown for many users; workaround existsLogin slow for a region; search downOn-call now; others during working hoursEvery 60 minRequired
SEV3Minor feature broken or small group affectedOne report page errors; image uploads slowWorking hoursAt start and resolutionOptional
SEV4Cosmetic or no current user impactCertificate expiring in 20 daysTicketNoneNo

When unsure, pick the higher severity. Downgrading is easy; reconstructing a missed SEV1 timeline is not.

The incident timeline, step by step

  1. Detect. An alert fires, a customer reports a problem or someone notices. Good monitoring makes alerts the most common source; if customers usually tell you first, fix your monitoring before anything else.
  2. Triage and declare. Confirm impact (open the site, check the alert details), assign a severity, name the IC and open a dedicated thread or channel.
  3. Communicate first. Post an initial status-page update within minutes, even if it only says you are investigating. Silence is what generates support tickets.
  4. Mitigate. Restore service before you understand the cause: roll back the deploy, fail over, scale up, disable the feature. Root cause can wait; users cannot.
  5. Resolve. Confirm recovery from the outside (monitoring shows the site up and stable), not only from a server shell.
  6. Close and review. Post a resolution update, write the post-mortem within a few working days while memory is fresh, and track the action items.

For the first minutes specifically, keep a checklist at hand; ours is in the website-down checklist for the first 15 minutes.

Communication cadence

The rule is simple: promise a time for the next update and keep the promise, even if there is nothing new. "Still investigating, next update at 14:30" is a perfectly good update. Customers and colleagues tolerate outages much better than they tolerate silence.

A status update template:

[Investigating | Identified | Monitoring | Resolved] — 14:05 UTC
Impact: Checkout fails for all customers. Browsing works.
What we know: Errors started at 13:52 after a deploy.
What we're doing: Rolling back the 13:50 deploy.
Next update: 14:35 UTC or sooner if resolved.

Keep internal and external updates separate. The incident channel can be noisy and technical; the status page should be calm, plain-language and specific about impact. A public status page also cuts down on duplicate support tickets, because customers can check before writing in.

Use your monitoring data during the incident

Good monitoring shortens every step after detection:

  • Cause codes narrow the search: dns_error points at DNS, ssl_error at the certificate or TLS config, timeout or connect_error at the network or an overloaded server, server_5xx at the application, keyword_missing at a page that loads but is wrong.
  • Timing breakdowns (DNS, connect, TLS, time to first byte) show which layer got slow before the failure.
  • Screenshots captured on the status change show what users actually saw, which is useful for the post-mortem and for support replies.
  • The response-time timeline gives you exact start and end times for the timeline and the impact statement.

Blameless post-mortems

A post-mortem exists to make the system better, not to find someone to blame. If people expect blame, they hide details, and hidden details are exactly what you need. Assume everyone acted reasonably given what they knew at the time, and ask why the system made the mistake easy and the detection slow.

Post-mortem template

  • Title and severity: one line, e.g. "SEV1: checkout unavailable for 38 minutes".
  • Summary: three or four sentences a non-engineer can understand.
  • Impact: who was affected, for how long, what they could not do; numbers from monitoring and logs where you have them.
  • Timeline (UTC): detection, declaration, key findings, mitigation, resolution. Include how the incident was detected and how long that took.
  • Root cause and contributing factors: the technical cause plus the conditions that let it happen (missing test, unclear runbook, alert too slow).
  • What went well: keep doing these.
  • What went poorly: process and tooling, not people.
  • Where we got lucky: things that limited the damage by chance; these are hidden risks.
  • Action items: each with an owner, a due date and a ticket link.

Use "5 whys" carefully: it helps you go past the first explanation, but real incidents usually have several contributing causes, not a single chain.

Action-item follow-through

A post-mortem with unfinished action items is a record of an outage you have agreed to repeat. Make follow-through mechanical:

  • Few and specific. Three concrete items beat ten vague ones. "Add a keyword check for 'Add to cart' on the product page" is an action; "improve monitoring" is not.
  • One owner each, a person rather than a team, and a due date.
  • Tracked where work is tracked, in the same backlog as feature work, labelled so you can find them.
  • Reviewed on a schedule. Go through open incident action items in a regular team meeting until they are done or explicitly dropped with a reason.
  • Prefer prevention and detection fixes over "be more careful". Humans will make the same mistake again; tests, guardrails and alerts do not get tired.

Some action items can be automated responses. If the mitigation was "restart the service", consider whether an automated action should do it next time, as described in turning outages into self-healing incidents.

Checklist

  • Written severity definitions based on user impact.
  • Named IC for every incident; IC does not debug on teams larger than two.
  • Separate incident thread or channel, opened at declaration.
  • First external update within minutes; next-update time always stated.
  • Mitigate first, investigate root cause second.
  • Blameless post-mortem for every SEV1 and SEV2 within a few working days.
  • Action items with one owner, a due date and a ticket, reviewed until closed.

Uptime Monitor covers the detection and evidence side of this process: alerts by email, Telegram, Slack, Discord or webhook, escalation when an outage passes a time limit, a cause code for every failed check, screenshots on state changes, and public status pages for customer communication. Start with a free account and you will have a timeline ready for your next post-mortem.

Keep reading