用好checklist,可以救命
人类学习的模式是向过去学习、向经验学习。我们”迷信”经验的力量,用旧有知识来解决新的问题,也往往会凑效。为了把这些经验传承下去,我们发明了清单和模板。清单可以定义为List,比如checkList。模板对于照猫画虎的知识传承尤其有用,于是在IT领域就有各种模板,比如规格说明书模板、需求分析模板、概要设计模板等。
制定清单、使用清单。是不是就是这样简单的清单实践呢?答案是否定的,可以先来读一个故事。
2005年8月29日,卡特里娜飓风横扫新奥尔良市,部分地区受灾严重,洪水肆虐,通信中断,消息无法送出。当人们最终将灾情反应到某个联邦官员的时候却被告知耐心等待。因为相关信息需要逐级上报,传统的指令和控制系统很快已被大量信息和指令淹没。政府拒绝放弃传统指令模式,灾情正在不断恶化,而各级政府却在争论决策权的归属问题,满载饮用水和食物的卡车迟迟不能进入灾区。
我们可以个故事里面看到了几层意思:
一是面对复杂问题,要做决策往往不容易。各级政府在争论决策权的时候,事态都在恶化了。
二是要建立应急处理机制,简单、直接、有效。
三是要有面对各种问题的checklist(清单)。
小小总结一下,在解决问题的时候我们有这样几个步骤:
1:出了什么问题,汇总问题现象,试图探究原因。
2:找到解决问题的流程,应该谁负责驱动,流程有哪些环节。有哪些可选方案。
3:按步骤解决问题。
世界卫生组织手术安全清单(Safe Surgery Checklist)由19个检查项目构成。其中,在实施麻醉前有7个检查项目:
患者本人或家属是否已经确认了患者的身份,并同意进行手术;
手术部位是否已经标记;
是否给患者进行血氧饱和度监测,该仪器运转是否正常;
患者是否有既往过敏史;
是否存在气道困难和误吸的风险(这是实施全身麻醉最危险的一个地方),所需设备和辅助人员是否已经就位;
是否存在失血量大于500毫升的风险,儿童为每千克7毫升;
必需的中心静脉置管、血袋和补液是否已经准备好。
由此可见,清单需要具备简洁、简单直接易操作的特点。简洁是说不面面俱到,如果一个环节检查项目过多比如超过20项,一是不易操作、二是容易出错。简单直接易操作是说checklist的描述要清晰无二义性、具体,其效果应该能进行观测,并由此改进。
我们可以看一个代码review的checklist,仅总结review代码安全维度的一些check点。
成也清单,容易出问题也是清单。因为执行者要检查的内容过多,陷入体力疲劳而出问题比比皆是。于是最好能把流程和check本身都强制到工具之中。
“提交代码的时候,强制要求要有review记录”, 就是一种强制流程。前文介绍过的静态扫描工具比如Checkstyle、Findbugs可以解决一些规则化、模板化的检查点,比如代码基础规范大小写、缩进等。
让清单成为一种习惯,清单应该足够简单、清晰并且深入人心。
同时,笔者提倡把“清单”嵌入到流程之中,只有到流程中,才是受关注和持续运营下去的。从侧面“治理”的模式往往会“名存实亡”。
笔者曾经在传统软件企业工作过几年,还记得每周或者每个月SQA和SCM同学都会拿着长长的excel 让研发负责人或者PM去打钩,表示“做了某项工作”。这种审查和度量模式的最大问题是SCM和SQA会对质量和流程遵循情况做展示并反馈给老板,但是研发工程师对“清单”并不感兴趣。
后来我来到互联网方面的研发公司,SQA的存在感几乎为零,但是我们在研发过程中形成了相关的“完成定义”。比如交付报告,研发必须完成代码之后进行自测、和静态代码评估、持续集成报告等被判定为“完成”之后,才能进入下一个流程。
欢迎免费加入 右军职业发展/终身成长星球,谈论技术、行业趋势、个体如何成长等话题