Skip to content
返回运维与 SRE

无指责复盘

运行找系统原因和产行动项而非替罪羊的无指责复盘。

为什么

指责复盘产谎言和恐惧:推坏部署的工程师藏它,下次事件低报,系统原因(无部署门、无金丝雀)存活再造宕机。无指责复盘假设每工程师用其信息尽力,失败在系统 — 允许坏部署到生产的工具、未触发的告警、不存在的 runbook。这产诚实时间线、真实根因和修系统的行动项使同人类错误不能再造同宕机。Google 数据清楚:无指责文化重复事件更少因系统修复复利,指责文化每季同事件因只人变了。

何时使用

每个 SEV1 和 SEV2 事件后,5 个工作日内。SEV3 可选;SEV4 无复盘。

如何做

1. 解决后 24h 内排,5 工作日内开
   - 记忆新鲜时;含值班、变更作者和引导者
   - 60-90 分钟;仅邀直接知情者(非全组织)

2. 从数据建时间线,非记忆
   - 拉告警、部署、聊天日志、指标截图;组装逐分钟时间线
   - "时间 T 我们知什么?" — 时间线揭信息缺口非人类错误

3. 用"5 个为什么"找系统原因
   - "部署坏结账" → "为何过 CI?" → "无 X 集成测试" → "为何无测试?" → ...
   - 停在可用系统变更修的原因(加测试、加门),非人类变更("更小心")

4. 写修系统的行动项
   - 每行动项:负责人、到期、系统修复(非"更小心")
   - 例:"加折扣边界情况集成测试(负责人:A,到期:2w)"、"加阻塞 >50% 错误率部署门(负责人:B,到期:1w)"

5. 跟踪行动项到完成
   - 复盘非文档写完即完;所有行动项发布才完
   - 冲刺规划审查未决行动项;有未决项的事件未关

示例

# postmortem-2026-03-15-checkout-down.md
## 摘要
结账错误率达 100% 持续 12 分钟;340 订单丢失(约 $4.2k 收入)。

## 时间线(来自数据)
- 14:03  部署 v2.4.1 发布(金丝雀跳过 — "小变更")
- 14:05  错误率 0% → 100%(新代码对 null 折扣抛异常)
- 14:07  告警 CheckoutSLOBurnRateFast 触发
- 14:09  值班确认,开 runbook
- 14:12  回滚启动
- 14:15  错误率 0%,事件解决

## 根因(5 个为什么)
1. 为何结账坏?→ 新代码对 null 折扣抛异常
2. 为何发布?→ 金丝雀被跳过
3. 为何跳金丝雀?→ 部署工具存在"小变更"覆盖
4. 为何覆盖存在?→ 无策略防生产关键路径用它
5. → 系统修复:移除 /checkout 的金丝雀跳过覆盖;要求显式 SRE 批准

## 行动项(系统、有主、有期)
- [ ] 移除生产关键路径金丝雀跳过覆盖(负责人:deploy-platform,到期:1w)
- [ ] 加集成测试:null 折扣边界情况(负责人:payments,到期:2w)
- [ ] 加部署门:金丝雀错误率 >1% 则阻塞(负责人:deploy-platform,到期:1w)
## 无指责注:跳金丝雀的工程师遵循了现有文档化流程。修的是流程非人。

常见问题

  • ⚠复盘指责人("工程师 X 推坏部署")而非允许它的系统 — 同错误复发因只人变了。
  • ⚠行动项模糊("更小心"、"改进测试")无负责人或到期 — 永不发布,系统原因存活。
  • ⚠复盘写了但行动项从不跟踪 — 文档是仪式非修复;事件重复因系统从未变。
  • ⚠跳"小"事件复盘 — 小事件是系统问题早期警告;跳它们保证后有大事件。

最佳实践

  • ✓假设每工程师用其信息尽力;失败在系统 — 这产诚实时间线和系统修复。
  • ✓要求每行动项有负责人、到期、系统变更(非"更小心");冲刺规划跟踪到完成。
  • ✓5 工作日内开复盘记忆新鲜时,从数据(日志、告警、部署)建时间线非回忆。
  • ✓把复盘行动项作一等冲刺工作;每系统修复发布才关事件,非文档写完。