8D.wiki

跨界尝试:软件行业能不能跑 8D?聊聊我的实操感受

谁说 8D 只能搞硬件制造?我把这套思路带进了一个开发团队,效果居然出奇得好。但也遇到了不少麻烦事。

我是制造出身的后来转行搞项目管理。当时我在想软件的 Bug 修复能不能也用 8D?Bug 也是质量不合格。D3 对应热修复,D4 对应代码回溯,D0 是应急响应流程,D1 是作战室。最难的是 D7,软件行业流程变化太快很难像硬件那样写死标准。但 8D 的逻辑强制开发人员去想为什么测试没测出来,这是逃逸点分析。 有个支付系统的 Bug 导致重复扣款,热修复在四十五分钟内完成。D4 用五个为什么从重复扣款追踪到幂等性键检查的竞态条件,这个 Bug 是上周重构时引入的,开发人员不知道系统原来就有幂等性逻辑。管理根因是知识管理失败加上代码评审缺少横切关注点验证。D7 加了一个 linter 规则:修改支付流程的 PR 必须引入幂等性模块否则不能合并。三个月后代码回退率从 12% 降到了 4%。程序员一开始很抵触觉得是在写检讨,但坚持了三个月后数据说明了一切。代码回退率从百分之十二降到了百分之四,P0 级事故从每月三次降到了零。团队 Leader 跟我说本以为 8D 会是 paperwork hell,结果它只是结构化思考而已。我们其实一直在做这些步骤,只是没有写下来也没有连成闭环。现在我们有了一套真正能防止问题重演的系统。 后来我把这套方法推广到了三个开发团队,每个团队根据自己的技术栈做了调整但保持了 D0 到 D8 的核心结构不变。最关键的经验是:D7 阶段在软件行业不能像硬件那样写死标准操作程序,但可以通过自动化工具来强制执行。比如在 CI/CD 流水线中加入 Check 步骤,或者在代码评审 Checklist 中加入特定检查项。这样即使用户换人了规则还在执行。 用 8D 管理软件 Bug 最大的价值不是解决了当次事故而是建立了组织学习机制。每次事故的根因分析和纠正措施都记录在 8D 报告中形成知识库。新人入职时可以学习历史 8D 报告了解系统曾经出过什么问题是怎么解决的。这种知识传承在人员流动频繁的软件行业特别重要。一个记录了一百份 8D 报告的团队和一个只用口头传帮带的团队体现出来的成熟度是完全不同的。8D 在软件开发中的另外一大价值是跨团队沟通。以前出事故时开发团队自己修自己测试团队自己加用例,没有人把经验分享给其他团队。用了 8D 之后 D7 阶段的水平展开强制要求把事故分析发布到团队 Wiki 上、更新运行手册、在运维评审会上分享。这样知识就在整个组织内流动起来了而不仅仅是停留在事故当事人的脑子里。

8D.wiki — Quality Engineering Knowledge Base