前段时间,我负责的小组在攻坚项目时,组内成员由于考虑不周全,导致代码上线后出现低级错误,对线上所有的用户都造成了数据混乱影响。影响范围极广(全用户),还好后来通过各种方式在 1 小时内将数据还原、错误修正。
理论上大家第一反应会是去追究第一责任人,做个组内处分,加强代码审核即可完事。但是我想起刘润老师介绍过:企业发生的所有的问题都是管理问题。因此我针对此事故做了深入的思考与分析。
是人有问题?还是流程有问题?
首先,不可否认事故的第一制造者是员工。
那么是员工的工作态度不对,还是专业能力不行呢?
负责实施此项目的工程师是一名有多年经验的技术人员,理论上专业能力和态度应该不差。虽然说造成此次事故是有失职之实,但因此定义此工程师能力不达标,要换更好的工程师,或者再安排其他人进组,那成本未免也太高了点。
那是我们的流程有问题吗?
貌似是。因为只要是人,只要存在人工操作,就不可避免出现人为错误。因为所有人不可能保证自己每时每刻的精力都是充分的。
这次事故发生的原因就是在修改代码时,新增的功能漏考虑之前的逻辑,导致用户操作污染了数据。
而在我们的开发流程里,为了追求快速开发,一直缺少「自动化测试」这一环节。
也就是说:
员工的失职虽然是直接原因,但是项目的研发流程和制度上一直存在漏洞,项目在执行的过程中一直存在「雷区」,只是看什么时候踩到罢了。
怎么解决?
既然能定位到原因,问题就好解决了。当前我做的第一决策是:
- 所有成员必须在 2 天内补完自己负责的核心业务逻辑测试;
- 为了减少人员成本,我们将代码从 coding 迁移到 git 上,这样做是为了能使用 travis-ci 进行自动化测试;
- 加强监控机制(《一个简单的天眼计划》),保证所有用户请求都能第一时间捕获,方便定位问题;
- 加强项目的 code review,避免出现业务逻辑错误;
- 培训项目组以及公司内部其他技术人员写测试的方案,将此方案推广到其他项目组中,避免类似事情发生;
现在的状况
在我们集成了自动化测试后,不仅系统更稳定了,而且还查出了几次开发中的隐患。当前整个项目组运转情况很好,用兄弟们的话说是:现在晚上都能睡得着觉了。
众生畏果,菩萨畏因。身为一个合格的负责人,遇到问题要更加深入的追本溯源,从源头、从制度上去避免问题的发生。