Incident Basics
8 examples to run your first Node.js incident calmly - 6 basic and 2 intermediate. Covers severity, communication, and the first-15-minutes checklist.
Search across all documentation pages
8 examples to run your first Node.js incident calmly - 6 basic and 2 intermediate. Covers severity, communication, and the first-15-minutes checklist.
requestId and traceId (see Request Correlation IDs)| Severity | Definition | Node example |
|---|---|---|
| SEV1 | Customer-facing outage or data loss risk | All pods OOMKilled, 100% 5xx |
| SEV2 | Major degradation, workaround exists | p95 > 5s, checkout slow |
| SEV3 | Minor impact, next business day fix | One tenant webhook delay |
| SEV4 | Cosmetic or internal-only | Staging deploy failed |
[SEV2] orders-api high latencyRelated: Incident Response Best Practices - full runbook checklist
Incident Commander (IC) - owns decisions, timeline, escalation
Technical Lead (TL) - drives mitigation, reads logs/metrics
Comms Lead - status page, stakeholder updates
Scribe - timeline, commands run, links to graphs#incident-orders-api[ ] Acknowledge page; join bridge / Slack huddle
[ ] Confirm blast radius (which services, tenants, regions)
[ ] Check last deploy (git SHA, time, who)
[ ] Grafana: error rate, p95, pod restarts, OOMKilled count
[ ] Logs: spike in 5xx, ECONNREFUSED, pool timeout, ETIMEDOUT
[ ] Recent config/secret/flag changes
[ ] Decide: rollback, scale, feature-flag kill, or investigate
[ ] Post first external update if SEV1/SEV2kubectl get pods / ECS task state before changesRelated: OOM Killer Response - memory triage | Bad Deploy Rollback - rollback paths
Mitigation beats perfect diagnosis in the first hour.
| Symptom | Fast mitigation |
|---|---|
| Bad deploy | Roll back to previous image SHA |
| Traffic spike | Scale HPA max; enable rate limit |
| DB pool exhausted | Reduce worker concurrency; pause non-critical queues |
| Memory leak | Rolling restart + traffic shift to healthy pods |
| Upstream 502 | Open circuit breaker; serve cached/degraded response |
Bad: "Event loop blocked due to libuv saturation."
Good: "Checkout is failing for about 30% of users. We deployed a fix at 14:22 UTC and errors are dropping. Next update in 20 minutes."
Template for stakeholder updates:
**Impact:** <who is affected, what is broken>
**Status:** Investigating | Mitigating | Monitoring | Resolved
**Actions:** <what we did in last 20 min>
**Next update:** <time UTC># Pod memory and restarts
kubectl top pods -n production -l app=orders-api
kubectl describe pod <pod> | grep -A5 "Last State"
# Recent deploy
kubectl rollout history deployment/orders-api -n production
# Logs with correlation
# filter: service=orders-api level=error last 30mNODE_OPTIONS if memory-related0:00 IC states severity, impact, current hypothesis
0:05 TL shares latest metric snapshot
0:10 Decision: rollback / scale / flag off / continue debug
0:15 Comms posts external update
0:25 Scribe reads timeline; confirm action owners
0:30 Repeat or downgrade severityWhen resolved:
[ ] Mark incident resolved in PagerDuty
[ ] Post final customer-facing summary
[ ] Create post-mortem doc within 48 hours (SEV1/SEV2)
[ ] List action items with owners and due dates
[ ] No blame - focus on systems and process gapsincident-followup labelOn-call engineer by default. Escalate to tech lead if blast radius crosses multiple services or exceeds 1 hour at SEV1.
SEV1 only, or SEV2 lasting more than 30 minutes without a mitigation path. Avoid paging for known maintenance.
Yes if OOMKilled or unresponsive, but capture logs and note deploy correlation first. Prefer rolling restart over deleting all pods at once.
Draft within 48 hours for SEV1/SEV2. Review in team meeting within 5 business days.
Stack versions: This page was written for Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5, and NestJS 11.
Reviewed by Chris St. John·Last updated Jul 16, 2026