Web Infrastructure
Website Outage Postmortem: Build an Accurate Incident Timeline
Create a blameless, evidence-based outage timeline using normalized timestamps, request IDs, status checks, decisions, and follow-up actions.
In this article
Website Outage Postmortem: Build an Accurate Incident Timeline
A useful postmortem explains what users experienced, how the system behaved, why defenses did not prevent the impact, and what will change. It is not a transcript of a stressful chat and not a search for one person to blame. The timeline is the factual spine of the report.
Distributed systems produce timestamps in different zones and units, while dashboards aggregate data and clocks drift. Building the timeline requires normalizing time, preserving evidence, and distinguishing observation from inference.
What the problem means
A timeline entry should include a normalized timestamp, event, source, and significance. Events can include the first user impact, alert, investigation hypothesis, configuration change, failover, partial recovery, full recovery, and validation. If a time is approximate, label it instead of implying false precision.
Core design principles
Use one reference time
UTC is a practical baseline. Preserve original timestamps and record the conversion so investigators can trace back to source data.
Separate facts from hypotheses
“Error rate increased” is an observation; “database saturation caused it” is a hypothesis until supported by evidence.
Include decisions and context
Record why responders changed a setting, rolled back, or waited. Outcomes without decision context are difficult to learn from.
Focus on system conditions
Ask which design, review, monitoring, access, or process conditions allowed the incident and delayed recovery.
Step-by-step workflow
- Define impact. State affected users, features, regions, duration, error modes, data consequences, and how impact was measured.
- Collect source evidence. Gather alerts, logs, deployments, configuration history, provider events, status checks, support reports, and communication records.
- Normalize timestamps. Convert epoch values and local times to UTC, note precision, and account for clock skew where discovered.
- Merge by correlation. Use request, trace, deploy, job, and incident IDs to connect records across services and avoid relying only on proximity in time.
- Identify contributing factors. Distinguish initiating change, latent weaknesses, detection gaps, mitigation delays, and conditions that limited the blast radius.
- Create owned actions. Each follow-up needs an owner, priority, due date, measurable outcome, and verification plan. Track it after the document is published.
Practical example
At 02:14:07 UTC, external checks begin returning 502. A deployment finished at 02:12, but logs show database connection exhaustion started earlier at 02:09. The team initially rolls back, which does not recover service. At 02:27 it increases connection availability and traffic recovers. The timeline prevents the deployment from being labeled the root cause solely because it was nearby.
How to test the control
Test this workflow in a controlled environment before relying on it during a real incident. Begin with “Define impact” and create three cases: an expected success, a safe rejection, and a degraded or unavailable dependency. Continue through “Collect source evidence” and “Normalize timestamps,” recording the observed status, timestamps, logs, and operator decision. Repeat the test after a material configuration, provider, dependency, or permission change. A control is operational only when another team member can follow the documented process and obtain the expected result without hidden knowledge.
Metrics and review cadence
Measure both completion and outcome. For this topic, track evidence that “Impact is quantified,” “Times are normalized and sourced,” and “Facts and hypotheses are separated” remain true, then pair those checks with operational signals such as failures, denied actions, recovery time, unexpected destinations, retry volume, or stale ownership as appropriate. Review trends instead of celebrating a one-time pass. A rising exception count can show that the workflow is too difficult, while zero alerts may mean the detection path is not working.
Operating this in production
Availability work should distinguish symptoms from causes. Observe DNS, TCP/TLS reachability, HTTP status, headers, redirects, application health, and dependencies separately. This layered view prevents teams from treating every outage as the same problem. Review the workflow after incidents, architecture changes, new integrations, and meaningful traffic growth. Assign an owner and measure whether the control works instead of recording only that it exists.
Common mistakes
- Using only the incident chat as evidence.
- Mixing time zones without labels.
- Calling the last change the root cause automatically.
- Writing vague actions such as “improve monitoring”.
- Publishing the report but not tracking follow-ups.
Duck Cloud tools for the workflow
Convert epoch values with the Unix Timestamp Converter, compare configuration or log excerpts with Text Diff, inspect structured evidence in the JSON Viewer, and reproduce public symptoms using the Website Status Checker and HTTP Header Checker.
Review checklist
- [ ] Impact is quantified
- [ ] Times are normalized and sourced
- [ ] Facts and hypotheses are separated
- [ ] Decisions include rationale
- [ ] Contributing factors are systemic
- [ ] What worked is documented
- [ ] Actions have owners and dates
- [ ] Completion is verified later
Conclusion
Website Outage Postmortem is most effective when it becomes a repeatable engineering habit. Start with the highest-impact boundary, document the expected behavior, test realistic failure cases, and keep evidence that the control works. Small, verified safeguards compound into a system that is easier to operate and safer to change.