极客时间已完结课程限时免费阅读

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

02 | Bug引发事故,该不该追究责任?-极客时间

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

讲述:丁婵

时长05:28大小2.50M

“人非圣贤,孰能无过?”技术人员也是人,因此编程过程中难免出 Bug,出了 Bug 系统就会出问题,出了问题系统就会宕机。那么,Bug 引发的一连串事故,该不该追究责任,又如何去追责呢?
今天我就和你聊聊 Bug 和责任的问题。
记得有一次,一个国内的访问团来公司参观。在交流的过程中,有人问:“在你们的工作中,工程师的 Bug 或者失误引发的问题,会不会被追究责任,会不会扣工资,会不会被开除?”
当时我很诚实地按照实际情况回答说:“不会。”
这个人又继续问:“那出了事故没有任何惩罚,不会有问题吗?”当时,我围绕着员工的素质、自觉性和责任心进行了回答。后来再次思考这个问题,我越想越觉得有意思。
我在 Airbnb 负责支付和交易业务,这意味着大部分的错误都等价于真金白银。无论是从用户那少收钱,导致公司亏损,还是从用户那多收钱引起法律或者合约的纠纷,只要跟钱沾了边,都不是小事情。
俗话说 “常在河边走,哪有不湿鞋”,各种因为代码问题引起的麻烦也是屡见不鲜。那么,在 Bug 引发问题的情况下,怎样处理才能最大程度上保持团队的主动性、责任感和执行力呢?
我们先来假想两种极端的情况:如果每个错误都会受到惩罚,会怎样;如果所有的错误都没有任何追究和跟进,又会怎样?
假如每个错误都会受到惩罚,不难想象,以下情况一定难以避免。
大家都怕闯祸,所以风险高的事没人做,或者总是那几个靠谱的“老司机”做。没有机会处理这种复杂情况的人,永远得不到锻炼,也无法积累这样的经验。
如果有人搞砸了什么事情,会因为担心承担后果而推卸责任,从而尽可能掩盖错误的坏影响,不让人知道。
如果别人犯了错,会觉得不关自己的事。
指出别人的错误就会导致别人被追究责任,因此看到有问题也会犹豫要不要指出。
反之,如果无论发生什么错误,都不需要承担后果或进行反省,没有任何担当,那可能又会出现以下情况。
同样的错误可能会一再发生。
小错没有被及时制止,或者没有引起足够重视,最终导致酿成大错。
做事仔细的人会觉得不公平。自己为了安全起见,每次代码改动都写很多单元测试,每个项目都反复测试和预防问题;但是别人的草草而就导致错误百出,却因为显得进度更快,反而被认为更有效率。
那么,对于工作中的错误,尤其是 Bug 导致的错误,我们应该采取什么态度和措施呢?
第一,追究责任,但不是惩罚。“知其然,并知其所以然”,搞清楚在什么场景下,什么样的 Bug 引发了什么样的错误。相关人员应该尽最大的可能去做好善后工作,并思考如何避免下次犯同样的错误。
第二,对事儿不对人。在这个追究的过程中,重点在于怎么改善流程、改进制度,来避免同样的错误,而不是指责员工不应该怎么样。如果相关人员已经那么做了,为什么这个错误仍然没有及时被发现和制止?
第三,反复问“为什么”,从根本上发现问题。错误为什么会发生?有些 Bug 可能只是显露出来的冰山一角。
举一个假设的例子,因为小王的代码改动影响了小李的代码,让小李之前实现的功能不对了。在这种情况下,我们首先要问:
为什么小李代码功能不对没有立马被发现?
答:因为小李当时的测试用例没有覆盖这种情况。
为什么小李的测试例不完整?
答:因为这个地方的测试需要 mock 一个服务的返回值,但是这个 mock 的值并不是真的服务器端的返回值,所以测也测不出来。
为什么要去 mock?
答:因为我们的测试系统框架不够完善。
这样反复问,反复想,就能找出根本上值得改进的问题,而这样的结果和受益,比惩罚犯错儿的人要好得多。
第四,员工关系的建立也很关键。我们需要培养的是大家相互信任、互帮互助,为了共同的目标努力的氛围,而不是一种不安全感。这种不安全感可能是自己不够自信,害怕犯错;也可能是对他人漫不关心,或是对其代码质量有怀疑。只有大家都相信,找出问题的根本目的是解决问题,避免问题再发生,才能建立一个不断反思、不断学习、不断进步的良性循环。
最后给你留一个思考题, 这也是现实生活中我多次听说的事故。如果你是一家公司的技术主管,团队里的一位工程师因为误操作删除了线上的用户数据,这时候你又发现,上个月数据的自动备份因为某些故障停止了,现在你该怎么办呢?
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 15

提建议

上一篇
01 | 职场分身术:从给答案到做引导
下一篇
03 | 每个工程师都应该了解的:A/B测试
 写留言

精选留言(50)

  • kilo
    置顶
    2017-11-16
    大家好,我是极客时间《朱赟的技术管理课》运营负责人小原 ,收到短信加不上我的用户,请关注公众号"极客时间“,回复你的微信号,我会拉你进群。
    共 1 条评论
    13
  • ibrothergang
    2017-11-15
    “如果你是一家公司的技术主管,团队里的一位工程师因为误操作删除了线上的用户数据,这时候你又发现,上个月数据的自动备份因为某些故障停止了,现在你该怎么办呢?” 首先,解决问题。 对外的事情永远应该放在首位解决,首先要考虑的是用户数据没有了怎么做补救。如果实在没有办法挽回数据了,考虑如何将损失降到最低。或者以某种方式补偿用户。用户的利益永远是第一位的。 其次,追究责任。 误操作也好,没有自动备份也罢,肯定需要有人来承担责任。没有责任人的事故很难挖掘到深层次的原因。错了就是错了,就是需要承担起这份错误带来的事故责任。 最后,流程优化。 人和机器最大的不同是人是具有主管能懂性的。机器可以严格按照程序执行,没有喜怒哀乐,但是人不行。谁都会有心情沮丧的阶段,也会有狂喜的时候,这种情况往往就容易犯错。所以如何规避,是不是可以从流程上去杜绝错误出现就是事后需要思考的。那前面的例子,如果删除操作是高危操作,是不是可以制定需要授权,是不是可以规定同时需要多人确定。自动备份是不是可以制定一些预警机制? 个人一些想法,抛个砖,引玉。
    展开
    138
  • 金鹏
    2017-11-15
    支持朱赟开直播答疑的赞我
    49
  • 朱显杰
    2018-04-27
    我作为公司运维主管,真真切切的碰到过数据被运维删除的场景,分享下我的一线经验: 首先,先想办法把损失降到最低,是否有其它备份,是否有其它途径重新生成数据等。 其次,作为技术主管,对外主动承担首要责任,不要把责任推给下属。 第三,用why-why法去找深层次原因,就是不断的问为什么,找出根本原因。 第四,针对上述的原因,一个个找解决方案,每个解决方案都要有责任人和时间点,避免重复再犯。 第五,针对事故进行复盘总结,对事不对人,重点不在于惩罚,而是在于吸取经验,总结教训。
    展开
    25
  • _fenghao_
    2017-11-15
    苹果支付实在是问题颇多...终于搞定了,先支持安姐,big fan! 以前创业碰到很多这种问题,重大事故大都是有流程,不执行,偷懒所致,因为越是不确定的东西反而自己更重视,反而熟悉的问题总错,所以还是要细心。个人非常不容易罚款,当时CEO逼着订下罚款的细节,我说👌,权责利要匹配,也一并订下奖赏的条款,不说话了……
    展开
    16
  • rembau
    2018-02-27
    所以答案就是不惩罚吗? 我有两个疑问: 1,例子中最后推敲到是测试系统不完善,可是如果要完善测试系统需要大量的资源,公司目前资源紧张,协调资源很难,是不是应该在这种情况下顶着压力申请资源改进测试系统呢,是不是每次代码合并都进行一次review更简单有效一点 2,留的题目中,我们继续使用上面例子中追问自己的思路,数据为什么没有备份,没有备份,为什么没有发告警信息呢,因为运维系统不完善。假设运维系统完善了,发告警了,可是运维同事忽略了呢。 所以我觉得有时候人与系统或者流程之间有个均衡,资源充足的公司不断完善系统,让每个人都成为螺丝钉,资源不充足的公司,要培养人的习惯,管理者要把更多的精力放在人身上。
    展开

    池建强回复: 是的,一切都是平衡,理论结合实际,知行合一

    14
  • Rachel_fang
    2017-11-16
    现在在的团队,感觉每个人都没有安全感~问题发生后大家想的不是如何解决而是先说是谁的责任~解决问题找到问题根本比追责带来的正向结果会好
    10
  • 刘剑
    2017-11-16
    对于朱老师提出的这个问题,我通过2个角度去看; 1.自身角度,这种问题不会同步出现。首先能够操作正式服务器后台数据的都是经验丰富的主程级别,出现概率极低。就算出现了,我们通过数据库日志也可以恢复数据,把损失降到最小。如果日志损坏了我们还可以通过最多24小时自动备份数据恢复。我相信不会同时都出问题。 还有就是需要及时上报让运营考虑应急预案,让客服做好疏导和安抚工作。必要时候给予出现问题用户一定补偿。 2.如果是很不规范创业公司,开发人员误删了用户数据(我们按最坏的考虑数据清空了),又没有备份,立刻停止任何操作,及时上报问题,立刻切断外网用户的访问,如果数据价值非常大可以请专业数据恢复公司恢复数据,运营、客服都要协调动起来,讨论出善后方案并高效执行。 对于第一种造成损失较少,但需要误删者解释清楚操作细节和原因,这种一般是操作规范的问题,以后严格按规范操作数据,然后需要向公司公开道歉,特别是增加了运营和客服工作量 对于第二种造成损失很大,是操作的问题,也是数据库冗灾没有做好,更是管理上的问题。需要深刻反思反省,加强冗灾能力同时让公司加人手和资源吧。通过这件事老板也不会不舍得投入了(曾见到过创业公司不重视服务器资源投入的问题,还有就是找靠谱的开发人员和技术主管)。
    展开
    9
  • 愤毛阿青
    2017-11-15
    前几个月删掉测试环境用户表的飘过
    8
  • 亚伦碎语
    2017-11-15
    日常code diff 一定迭代后 retro看看有什么可以改进的,制定action改进
    6
  • jayxhj
    2017-11-15
    出现线上问题第一件事肯定是先解决这个 bug 或者问题,所以尝试修补数据并安抚用户肯定是首要的事情。 不过针对丢失用户数据这件事,很有可能数据追不回来了,这时候给用户相应的补偿很重要(包括但不限于发优惠券,送套餐,营销召回等方式),一方面达到挽救损失,另一方面直面问题,让用户降低对平台的不信任。当然,最重要的是,得解决数据丢失的问题,定期检查,灾备演练,防止这数据丢失的事情再次发生。
    展开
    5
  • Hills录
    2017-11-15
    昨天差点把测试代码上生产。。。
    4
  • 禾子先生
    2017-11-15
    您好,既然事故已经发生,眼前第一件事就是救火了。第一,我会先分析此次误删了多少用户数据,并使用最近备份的数据;第二,试试恢复数据,找专业公司来对磁盘数据进行恢复;第三,汇报上级领导; 做完这些,就要开始“追责”了,为什么发生,怎么发生的。比如,是不是权限管理有疏漏,是不是生产安全操作原则没有普及,技术人员是否疲劳工作等。
    4
  • 金鹏
    2017-11-15
    看到这个问题菊花一紧。个人觉得先从技术的角度尝试,有没有trick的方式可以恢复,如果没有用上上个月的,尽量减少损失。然后复盘,是谁的责任,并找到问题,完善流程。为什么程序猿有数据库删除权限?是否要分权限?是否要专人负责?设立Dba?为什么数据备份出错?是否有云备份?分布式数据?为什么一个月都没人知道?出问题为什么无预警信息?最后,主管是否有很大的责任? 朱赟可否每周做一次复盘?回答一些大家的问题,另外也让大家知道你看问题的视角,强化记忆和学习。帮助一起提升。 当然,如果直播就更赞。(色)(色)
    展开
    3
  • 波知所云
    2020-03-13
    如果你是一家公司的技术主管,团队里的一位工程师因为误操作删除了线上的用户数据,这时候你又发现,上个月数据的自动备份因为某些故障停止了,现在你该怎么办呢? 首先分析定位故障后,想办法恢复对外服务,含技术修复及业务应急,通过双活系统、灾难备份系统、最近一次可用的数据备份、其他关联系统的数据、大数据平台(或数据仓库等二线数据)、本系统的日志等方式、业务操作打印流水等想办法恢复数据。如果造成了数据丢失,需要配合业务方面协商业务应急处置办法,出具公告。在再次对外服务前,对当前的数据副本做好完整的备份;当恢复后的数据从业务逻辑、数据逻辑等方面进行充分检验,避免脏数据造成二次事故。 其次关注修复数据的实际运行,抢修期间即便采取了很多防范二次事故的措施,但由于时间非常紧急,很可能万中漏一,发生抢修数据不完整,或者约束关系检查不完整,或者其他各种问题,需要及时关注系统运行尤其是数据一致性等问题。 再次,系统性分析事故原因分析,例如为何会发生误删数据,是否没有严格执行权限控制和双人会同要求? 相关维护方案是否没有经过审批?删除数据的高危操作是否没有被有效拦截?变更操作之前是否没有按规定执行备份?数据备份失效为何没有告警?是否缺失必要的异构备份机制? 最后充分吸取教训,围绕生产运行、变更维护、数据备份等工作的流程机制、系统配置等进行优化,通过测试环境实战模拟演练检验有效性,从机制上保障生产,尤其是数据的安全性。
    展开
    2
  • 章洁
    2018-02-26
    发现留言很有意思。
    2
  • Mindy
    2017-11-30
    首先,解决问题。 其次,组织复盘。从组织结构、工具、流程规范等方面思考,找到根本原因进行解决。另外,如果出现人员方面的责任心问题,需要追求责任,给予惩罚。
    2
  • nanjishidu
    2017-11-15
    首先进行数据恢复减少损失。 然后完善自动备份程序和操作流程,杜绝类似问题的发生。 最后问题追责。技术主管是第一责任人,操作数据之前未进行数据备份,未定时检查数据备份是否正常。运维人员是第二责任人,未定时检查自动备份程序的稳定性。工程师是第三责任人。
    2
  • 2019-08-12
    事中:应急,第一时间毛估影响及止损方案,降低业务影响(协调公关、客服、运营等对外发文安抚) 事后:复盘,输出后续优化改进,避免下次类似问题
    1
  • 吕韬
    2018-07-28
    第一步:尽力补救,能救多少是多少,不能救的制定一套补偿方案,方案要具体,怎么实操、花多少成本多少时间,谁去做 第二步:复盘,找问题的相关责任人还原整个事实,建议如何防止这类问题 第三步:管理层内部分析原因,思考流程机制的问题,减少人为失误,发布新的管理办法,然后继续观察
    1