Bug引发事故,该不该追究责任?

Bug引发事故,该不该追究责任?

朗读人:丁婵    05′27′′ | 2.50M

“人非圣贤,孰能无过?”技术人员也是人,因此编程过程中难免出 Bug,出了 Bug 系统就会出问题,出了问题系统就会宕机。那么,Bug 引发的一连串事故,该不该追究责任,又如何去追责呢?

今天我就和你聊聊 Bug 和责任的问题。

记得有一次,一个国内的访问团来公司参观。在交流的过程中,有人问:“在你们的工作中,工程师的 Bug 或者失误引发的问题,会不会被追究责任,会不会扣工资,会不会被开除?”

当时我很诚实地按照实际情况回答说:“不会。”

这个人又继续问:“那出了事故没有任何惩罚,不会有问题吗?”当时,我围绕着员工的素质、自觉性和责任心进行了回答。后来再次思考这个问题,我越想越觉得有意思。

我在 Airbnb 负责支付和交易业务,这意味着大部分的错误都等价于真金白银。无论是从用户那少收钱,导致公司亏损,还是从用户那多收钱引起法律或者合约的纠纷,只要跟钱沾了边,都不是小事情。

俗话说 “常在河边走,哪有不湿鞋”,各种因为代码问题引起的麻烦也是屡见不鲜。那么,在 Bug 引发问题的情况下,怎样处理才能最大程度上保持团队的主动性、责任感和执行力呢?

我们先来假想两种极端的情况:如果每个错误都会受到惩罚,会怎样;如果所有的错误都没有任何追究和跟进,又会怎样?

假如每个错误都会受到惩罚,不难想象,以下情况一定难以避免。

  1. 大家都怕闯祸,所以风险高的事没人做,或者总是那几个靠谱的“老司机”做。没有机会处理这种复杂情况的人,永远得不到锻炼,也无法积累这样的经验。
  2. 如果有人搞砸了什么事情,会因为担心承担后果而推卸责任,从而尽可能掩盖错误的坏影响,不让人知道。
  3. 如果别人犯了错,会觉得不关自己的事。
  4. 指出别人的错误就会导致别人被追究责任,因此看到有问题也会犹豫要不要指出。

反之,如果无论发生什么错误,都不需要承担后果或进行反省,没有任何担当,那可能又会出现以下情况。

  1. 同样的错误可能会一再发生。
  2. 小错没有被及时制止,或者没有引起足够重视,最终导致酿成大错。
  3. 做事仔细的人会觉得不公平。自己为了安全起见,每次代码改动都写很多单元测试,每个项目都反复测试和预防问题;但是别人的草草而就导致错误百出,却因为显得进度更快,反而被认为更有效率。

那么,对于工作中的错误,尤其是 Bug 导致的错误,我们应该采取什么态度和措施呢?

第一,追究责任,但不是惩罚。“知其然,并知其所以然”,搞清楚在什么场景下,什么样的 Bug 引发了什么样的错误。相关人员应该尽最大的可能去做好善后工作,并思考如何避免下次犯同样的错误。

第二,对事儿不对人。在这个追究的过程中,重点在于怎么改善流程、改进制度,来避免同样的错误,而不是指责员工不应该怎么样。如果相关人员已经那么做了,为什么这个错误仍然没有及时被发现和制止?

第三,反复问“为什么”,从根本上发现问题。错误为什么会发生?有些 Bug 可能只是显露出来的冰山一角。

举一个假设的例子,因为小王的代码改动影响了小李的代码,让小李之前实现的功能不对了。在这种情况下,我们首先要问:

  1. 为什么小李代码功能不对没有立马被发现?
    答:因为小李当时的测试用例没有覆盖这种情况。
  2. 为什么小李的测试例不完整?
    答:因为这个地方的测试需要 mock 一个服务的返回值,但是这个 mock 的值并不是真的服务器端的返回值,所以测也测不出来。
  3. 为什么要去 mock?
    答:因为我们的测试系统框架不够完善。

这样反复问,反复想,就能找出根本上值得改进的问题,而这样的结果和受益,比惩罚犯错儿的人要好得多。

第四,员工关系的建立也很关键。我们需要培养的是大家相互信任、互帮互助,为了共同的目标努力的氛围,而不是一种不安全感。这种不安全感可能是自己不够自信,害怕犯错;也可能是对他人漫不关心,或是对其代码质量有怀疑。只有大家都相信,找出问题的根本目的是解决问题,避免问题再发生,才能建立一个不断反思、不断学习、不断进步的良性循环。

最后给你留一个思考题, 这也是现实生活中我多次听说的事故。如果你是一家公司的技术主管,团队里的一位工程师因为误操作删除了线上的用户数据,这时候你又发现,上个月数据的自动备份因为某些故障停止了,现在你该怎么办呢?

版权归极客邦科技所有,未经许可不得转载

精选留言

  • 小原-极客时间
    大家好,我是极客时间《朱赟的技术管理课》运营负责人小原 ,收到短信加不上我的用户,请关注公众号"极客时间“,回复你的微信号,我会拉你进群。
    2017-11-16
  • ibrothergang
    “如果你是一家公司的技术主管,团队里的一位工程师因为误操作删除了线上的用户数据,这时候你又发现,上个月数据的自动备份因为某些故障停止了,现在你该怎么办呢?”

    首先,解决问题。
    对外的事情永远应该放在首位解决,首先要考虑的是用户数据没有了怎么做补救。如果实在没有办法挽回数据了,考虑如何将损失降到最低。或者以某种方式补偿用户。用户的利益永远是第一位的。

    其次,追究责任。
    误操作也好,没有自动备份也罢,肯定需要有人来承担责任。没有责任人的事故很难挖掘到深层次的原因。错了就是错了,就是需要承担起这份错误带来的事故责任。

    最后,流程优化。
    人和机器最大的不同是人是具有主管能懂性的。机器可以严格按照程序执行,没有喜怒哀乐,但是人不行。谁都会有心情沮丧的阶段,也会有狂喜的时候,这种情况往往就容易犯错。所以如何规避,是不是可以从流程上去杜绝错误出现就是事后需要思考的。那前面的例子,如果删除操作是高危操作,是不是可以制定需要授权,是不是可以规定同时需要多人确定。自动备份是不是可以制定一些预警机制?

    个人一些想法,抛个砖,引玉。
    2017-11-15
  • 金鹏
    支持朱赟开直播答疑的赞我
    2017-11-15
  • 刘剑
    对于朱老师提出的这个问题,我通过2个角度去看;
    1.自身角度,这种问题不会同步出现。首先能够操作正式服务器后台数据的都是经验丰富的主程级别,出现概率极低。就算出现了,我们通过数据库日志也可以恢复数据,把损失降到最小。如果日志损坏了我们还可以通过最多24小时自动备份数据恢复。我相信不会同时都出问题。
    还有就是需要及时上报让运营考虑应急预案,让客服做好疏导和安抚工作。必要时候给予出现问题用户一定补偿。

    2.如果是很不规范创业公司,开发人员误删了用户数据(我们按最坏的考虑数据清空了),又没有备份,立刻停止任何操作,及时上报问题,立刻切断外网用户的访问,如果数据价值非常大可以请专业数据恢复公司恢复数据,运营、客服都要协调动起来,讨论出善后方案并高效执行。

    对于第一种造成损失较少,但需要误删者解释清楚操作细节和原因,这种一般是操作规范的问题,以后严格按规范操作数据,然后需要向公司公开道歉,特别是增加了运营和客服工作量
    对于第二种造成损失很大,是操作的问题,也是数据库冗灾没有做好,更是管理上的问题。需要深刻反思反省,加强冗灾能力同时让公司加人手和资源吧。通过这件事老板也不会不舍得投入了(曾见到过创业公司不重视服务器资源投入的问题,还有就是找靠谱的开发人员和技术主管)。
    2017-11-16
  • jayxhj
    出现线上问题第一件事肯定是先解决这个 bug 或者问题,所以尝试修补数据并安抚用户肯定是首要的事情。

    不过针对丢失用户数据这件事,很有可能数据追不回来了,这时候给用户相应的补偿很重要(包括但不限于发优惠券,送套餐,营销召回等方式),一方面达到挽救损失,另一方面直面问题,让用户降低对平台的不信任。当然,最重要的是,得解决数据丢失的问题,定期检查,灾备演练,防止这数据丢失的事情再次发生。
    2017-11-15
  • _fenghao_
    苹果支付实在是问题颇多...终于搞定了,先支持安姐,big fan!

    以前创业碰到很多这种问题,重大事故大都是有流程,不执行,偷懒所致,因为越是不确定的东西反而自己更重视,反而熟悉的问题总错,所以还是要细心。个人非常不容易罚款,当时CEO逼着订下罚款的细节,我说👌,权责利要匹配,也一并订下奖赏的条款,不说话了……

    2017-11-15
  • Seven_dong
    日常code diff 一定迭代后 retro看看有什么可以改进的,制定action改进
    2017-11-15
  • 禾子先生
    您好,既然事故已经发生,眼前第一件事就是救火了。第一,我会先分析此次误删了多少用户数据,并使用最近备份的数据;第二,试试恢复数据,找专业公司来对磁盘数据进行恢复;第三,汇报上级领导;
    做完这些,就要开始“追责”了,为什么发生,怎么发生的。比如,是不是权限管理有疏漏,是不是生产安全操作原则没有普及,技术人员是否疲劳工作等。
    2017-11-15
  • 敏感词测试
    前几个月删掉测试环境用户表的飘过
    2017-11-15
  • rembau
    所以答案就是不惩罚吗?
    我有两个疑问:
    1,例子中最后推敲到是测试系统不完善,可是如果要完善测试系统需要大量的资源,公司目前资源紧张,协调资源很难,是不是应该在这种情况下顶着压力申请资源改进测试系统呢,是不是每次代码合并都进行一次review更简单有效一点
    2,留的题目中,我们继续使用上面例子中追问自己的思路,数据为什么没有备份,没有备份,为什么没有发告警信息呢,因为运维系统不完善。假设运维系统完善了,发告警了,可是运维同事忽略了呢。

    所以我觉得有时候人与系统或者流程之间有个均衡,资源充足的公司不断完善系统,让每个人都成为螺丝钉,资源不充足的公司,要培养人的习惯,管理者要把更多的精力放在人身上。
    2018-02-27
    池建强回复

    是的,一切都是平衡,理论结合实际,知行合一

    2018-02-28

  • Rachel_fang
    现在在的团队,感觉每个人都没有安全感~问题发生后大家想的不是如何解决而是先说是谁的责任~解决问题找到问题根本比追责带来的正向结果会好
    2017-11-16
  • Hills
    昨天差点把测试代码上生产。。。
    2017-11-15
  • 章洁
    发现留言很有意思。
    2018-02-26
  • Mindy
    首先,解决问题。
    其次,组织复盘。从组织结构、工具、流程规范等方面思考,找到根本原因进行解决。另外,如果出现人员方面的责任心问题,需要追求责任,给予惩罚。
    2017-11-30
  • nanjishidu
    首先进行数据恢复减少损失。
    然后完善自动备份程序和操作流程,杜绝类似问题的发生。
    最后问题追责。技术主管是第一责任人,操作数据之前未进行数据备份,未定时检查数据备份是否正常。运维人员是第二责任人,未定时检查自动备份程序的稳定性。工程师是第三责任人。
    2017-11-15
  • 郝志强
    简单说下自己的思路:第一,优先解决问题,尽可能地降低用户和公司损失;第二,问责,弄清楚人员误操作的原因,以解决问题为目的,责任同样要承担;第三,查找上个月数据未正常备份的原因,追责;第四,根据上述情况制定相应措施以及改进方案。其实大部分人遇到这种情况都是愤怒和责怪,但是这并不能解决任何问题,只会导致问题越发严重。因此,及时的控制自己的情绪很重要,职位越高,关健时刻越要冷静,这样才能抓住问题的核心,不至于乱了阵脚。
    2017-11-16
  • 金鹏
    看到这个问题菊花一紧。个人觉得先从技术的角度尝试,有没有trick的方式可以恢复,如果没有用上上个月的,尽量减少损失。然后复盘,是谁的责任,并找到问题,完善流程。为什么程序猿有数据库删除权限?是否要分权限?是否要专人负责?设立Dba?为什么数据备份出错?是否有云备份?分布式数据?为什么一个月都没人知道?出问题为什么无预警信息?最后,主管是否有很大的责任?

    朱赟可否每周做一次复盘?回答一些大家的问题,另外也让大家知道你看问题的视角,强化记忆和学习。帮助一起提升。
    当然,如果直播就更赞。(色)(色)
    2017-11-15
  • 剑走偏锋
    用能找到的最近备份先恢复,让线上应用先工作起来,这样会牺牲很大的数据一致性。技术复盘,按照5why的方式追问下去,为什么会误删?没做权限管理?为什么自动备份不work了?没有预警?对事不对人,有利于快速解决问题。
    2017-11-15
  • 吕韬
    第一步:尽力补救,能救多少是多少,不能救的制定一套补偿方案,方案要具体,怎么实操、花多少成本多少时间,谁去做
    第二步:复盘,找问题的相关责任人还原整个事实,建议如何防止这类问题
    第三步:管理层内部分析原因,思考流程机制的问题,减少人为失误,发布新的管理办法,然后继续观察
    2018-07-28
  • missa
    先针对出现的问题去思考why,为什么数据能被别人删除。为什么备份数据也出现故障了。
    1.数据的权限管理是不是有问题,放得太大。
    2.备份机制是不是不够好,故障后恢复时间这么慢
    针对以上情况去解决问题,设定好流程规范,防止在犯错。
    优先去补救,其次再追责,最后总结设置规范流程
    2018-07-10