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.
| Role | Responsibilities | Does not |
|---|---|---|
| Incident commander (IC) | Owns the incident end to end: sets severity, assigns work, decides on rollbacks, calls in help, declares it resolved | Debug hands-on (unless the team is one person) |
| Communications lead | Posts status-page and customer updates on schedule, answers support and management, keeps the timeline | Make technical decisions |
| Responders | Investigate and fix, report findings to the IC | Change production without telling the IC |
| Scribe (optional) | Records timestamps, actions and decisions | Anything 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.
| Level | Definition | Example | Response | Update cadence | Post-mortem |
|---|---|---|---|---|---|
| SEV1 | Service down or core function broken for most users; data loss or security exposure | Site returns 5xx for everyone; checkout fails | All hands, immediately, any hour | Every 30 min | Required |
| SEV2 | Major feature broken or severe slowdown for many users; workaround exists | Login slow for a region; search down | On-call now; others during working hours | Every 60 min | Required |
| SEV3 | Minor feature broken or small group affected | One report page errors; image uploads slow | Working hours | At start and resolution | Optional |
| SEV4 | Cosmetic or no current user impact | Certificate expiring in 20 days | Ticket | None | No |
When unsure, pick the higher severity. Downgrading is easy; reconstructing a missed SEV1 timeline is not.
The incident timeline, step by step
- 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.
- 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.
- Communicate first. Post an initial status-page update within minutes, even if it only says you are investigating. Silence is what generates support tickets.
- 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.
- Resolve. Confirm recovery from the outside (monitoring shows the site up and stable), not only from a server shell.
- 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_errorpoints at DNS,ssl_errorat the certificate or TLS config,timeoutorconnect_errorat the network or an overloaded server,server_5xxat the application,keyword_missingat 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.