每个团队都应该相信“改进是可能的”,即使实际早已不再发生改进——而这正是回顾会议原本的意义所在。
但实际上,多数团队只是将回顾会议当作一个记录问题的过程——这些问题往往没人有时间解决。于是,一到回顾会议,大家便一起点头认同:“对,这确实是个问题”,“对,我们确实应该解决它”——但“不是今天”。
有时,团队甚至会进一步“分配”某人去“调查”这个问题。只不过“调查”从未有任何实际进展。毕竟,没有人真正知道“调查”到底意味着什么——除了大家都很清楚,它绝对不是“修复”。否则早就写“去修复它”了。
不过没关系——我们已经把问题写下来了!这样做还有一个额外的好处:如果哪天问题爆发,我们可以理直气壮地说:“这个问题我们早就记录了,只是一直没空处理。”
听起来像是流程失效?但这其实就是大多数团队回顾会议的真实写照。它们并不真正推动持续改进,而只是让人对那些一直被忽略的问题感觉“良好”一些罢了。
如果团队的回顾会议也正是如此运作的,那么这篇文章的内容或许可以帮团队厘清“回顾会议应该是什么”与“回顾会议实际上成了什么”之间的差异。
其实,回顾会议是可以被修复的。在作者之前所参与的多个团队中,包括目前所在的团队,都经历过真正良好的持续改进文化。以下便是作者在其中学到的一些经验,文章末尾也会分享一个思考:为什么“总有点什么是坏的”,并且为什么这并非坏事。
起源:丰田的生产方式(TPS)与“持续改进”
“持续改进”(Kaizen,改善)理念起源于丰田生产方式(Toyota Production System, TPS)。在 TPS 中,工人若发现挡风玻璃有裂痕,可以拉下安灯绳(andon cord),立刻停线。接着,大家一起追溯问题根源,并制定防止其再次发生的方案。
注意:TPS 并不会说“记录下问题以备后查”或“等有空再调查”。而是立即行动,并在当天完成根因分析。
即使不是所有问题都立即解决,团队负责人也会迅速到场评估,决定是否应暂停生产,并启动正式问题分析程序。关键在于,反馈周期极短——以小时为单位,而非数周。
此外,根因分析的最终产出必须是有明确负责人和截止日期的具体行动。目标是确保此类缺陷永远不会再发生。
但在软件开发团队中,这种机制是否存在?多数情况是否定的。原因有很多,以下将逐一解析每个问题,并探讨如何修复。
原因一:缺乏“停线”的权限
在丰田,工人有权立即停线。而在软件团队中,却没人真正拥有“叫停流程”的权力。最接近的形式,也不过是在几周之后的回顾会议中提出问题。
虽然在软件行业,程序并不需要被“停运”,但我们的劳动本身不是软件,而是开发流程。而流程,是可以,也应该在关键时刻暂停的——哪怕只是由一两个人暂停下来处理问题。
但问题是——谁来停下来解决问题?
若这个问题没有明确答案,那么没有人会主动停下来。大家只会期望“总有别人会处理”,或者希望“问题自己会消失”。
而这种状态的根源,在于许多管理者的错误评估标准——他们只关注“有没有新功能上线”,哪怕后台早已满目疮痍。
解决方法:设立“问题处理专员”
一种成功的做法来自于 Resend 公司。该公司每周指定一名成员担任 The Fixer(修复者)。
这个角色的职责是:只要发生问题,修复者就是主要负责人,不论是 SQS 队列延迟,还是仪表板按钮失效,大家都知道修复者必须出手解决。
此机制的好处不仅在于保证问题会被解决,更有助于开发者理解底层基础设施,反之亦然,使平台工程师也能更理解产品运作。
对于任期的设定,作者认为“一周”是理想周期,既给修复者足够时间,也避免其因压力过大而倦怠。
需要注意:这并不意味着只有修复者能解决问题,其他人依然可以协助。但最关键的是:必须明确某人对问题负有最终责任。
原因二:缺乏即时响应与早期复盘
在 TPS 中,问题一出现便被立即响应。而多数团队,只会选择快速打个补丁,口头承诺“之后再分析原因”。
但“之后”永远不会变成“现在”。每个人都忙着做功能,并心安理得地等待下一次回顾会议“讨论问题”。
解决方法:明确设置问题处理时限
更好的方式是:为问题后续分析设定明确的时间窗口。这个时间不是“公司统一规定”的,而是由真正关心问题的人共同设定的合理期限,并由领导持续强化这种文化。
虽然没有统一的时间标准,但关键在于:分析必须发生得足够快,且不能无限延期。
当处理时效变得清晰,团队就能避免问题永远“排不进优先级”的困境。
原因三:回顾会议缺乏具体任务、负责人和期限
在 TPS 中,问题分析最终都会转化为明确的行动项目,有具体内容、负责人、时间节点。
反观软件团队中的回顾会议,其行动项经常是“调查”、“改善”、“文档化”等模糊术语——这些动词听起来积极,但含义却模棱两可。
例如,“调查某个错误”究竟意味着什么?没人能说清。可能是看看日志就结束,也可能是深入找出根因并彻底修复。
多数人想表达的是后者,但写出来的是前者。
解决方法:用具体行为替代抽象动词
例如,与其说“调查 bug”,不如明确写成:“使 delta-wave 分流器具备幂等性”。这样一来,重复消息就不会再造成下游错误。
写下真正想做的事,分配具体负责人,设定完成期限,并在之后跟进其执行进度。
而要写出这些具体任务,最佳时机是在问题发生后不久。此时印象最深,也最容易清晰识别解决路径。
不明确的任务,往往不是能力问题,而是因为我们根本还没搞清楚问题的解决方式。
原因四:只有临时补救,没有永久修复
在 TPS 中,分析结果必须转化为能根本解决问题的方案。
但在大多数软件团队中,大家止步于临时补救,例如增加重试次数、扩大服务器资源等等。虽然这些临时手段是必要的,能解决眼前燃眉之急,但问题在于:团队往往就此止步。
解决方法:实施不可复现的问题修复机制
真正的“永久修复”指的是:让同一个问题永远不会再次发生。而高手的实践,甚至能让一整类问题彻底绝迹。
当团队达到更高水平,还能设计出具备自修复能力的系统——即便发生故障,也能自动修复,对业务影响最小。
总结:持续改进文化不靠回顾会议,而靠行动机制
将上述四个方面结合起来,就能看出:人们常说的“DevOps文化”,其实正是持续改进文化,与丰田几十年前工厂地面的运作方式本质相同。
核心原则如下:
- 赋予员工“停线”的权力,或至少停下流程的一部分;
- 明确责任人及其应在何时解决问题;
- 复盘后产出具体可执行任务,指派负责人与截止日期;
- 推行永久修复,防止相同问题再次发生。
注意,上述流程并未提到“定期回顾会议”。因为一支真正具备持续改进文化的团队,不依赖定期回顾会议也能不断优化。
事实上,定期回顾有时甚至会产生反效果——它让人产生错觉:改进是“专属时段的任务”,不属于日常工作的一部分。
在实际工作中,改进应该持续发生,最好能在问题刚刚出现时立即介入。
这并不是说应该马上取消回顾会议,它们依然可用于反思团队的持续改进机制本身是否有效,只是频率可以逐渐降低。
最后:总有点什么是“坏”的,也没关系
在结束之前,有一点很重要:总会有一些地方是坏的。
虽然混沌工程、自动回滚是可靠性工程的终极目标,但大多数团队达不到那个水平。
初创企业必须快速前进,在可靠性与速度之间寻找创造性平衡;而传统企业则必须在繁杂的组织中推动变革。
现实是:系统永远不完美,但只要愿意努力,我们就能在这样的环境中做出伟大的产品,与同样热爱技术的同伴共同成长。
本质上,持续改进的真正内涵,是承认“永远会有点什么坏掉”,并愿意一件件地修复它们。
只有当团队真正相信“完美状态永远不会到来”,才能建立起真正可靠的持续改进体系。