无指责复盘
运行找系统原因和产行动项而非替罪羊的无指责复盘。
为什么
指责复盘产谎言和恐惧:推坏部署的工程师藏它,下次事件低报,系统原因(无部署门、无金丝雀)存活再造宕机。无指责复盘假设每工程师用其信息尽力,失败在系统 — 允许坏部署到生产的工具、未触发的告警、不存在的 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 工作日内开复盘记忆新鲜时,从数据(日志、告警、部署)建时间线非回忆。
- ✓把复盘行动项作一等冲刺工作;每系统修复发布才关事件,非文档写完。