员工写了个大 BUG,网站痛失 300 元!

共 3230字,需浏览 7分钟

 ·

2024-04-11 15:33

Python客栈设为“星标
第一时间收到最新资讯

前几天,我们公司的员工写了个大 BUG,导致网站痛失 300 元!

事故现场

事情是这样的,我们公司做了很多自己的网站,每个网站都需要支付功能,所以我们就开发了一个支付中心。

各个业务系统可以很方便地接入支付中心,实现支付,不用再重复开发支付功能了,大大节约开发成本。

听起来很不错,但这样一来会存在一个很严重的问题,一旦支付中心挂了,所有的业务都会受到影响。

而我们开发同学这次写的 Bug,完美击垮支付中心!

他是怎么办到的呢?

我们有一个小需求:用户如果直接输入域名访问支付中心(而不是通过正常跳转下单访问),这时其实支付中心的页面内容是无意义的,我们希望将这些用户跳转到公司的官网。

结果,这位开发同学在上线其他需求的时候,没有经过任何测试,就把支付中心页面跳转的代码上线了。而万万没想到的是,短短 6 行代码,竟然写了个 Bug,导致所有线上用户在创建支付订单时,强制跳转到了公司官网,而不是支付页面!

事故影响

就是这么一个 Bug,持续了整整 4 个多小时。事后,根据我们后台粗略的统计,大概 8 位用户付款失败,造成收入损失 380 元!

这是直接影响,间接影响是导致用户流失、降低用户对公司产品的信任度等。

大家可能觉得这个金额和用户损失并不大。的确,这点影响对于大公司来说,几乎可以忽略不计;但对于我们创业公司来说,这已经是不小的收入了,而且我个人认为评估事故重要性的因素不止有收入影响,还要看事故的性质和产生原因。

我对这位开发同学说:如果你是在大公司写出了这个 Bug,搞不好分分钟几千万、几亿的流水没了。。。

所以我们把这次的事故定为 P0 级 重大事故,不是为了放大责任,而是希望以此为鉴,详细复盘,防止日后再出现类似的情况。

事故复盘

处理完线上 Bug 后,我们聚在一起讨论这次事故背后的原因,思考怎么能够进行预防和改进。

写这个 Bug 的同学态度很好,主动写了一篇复盘文档,首先是他写的事故原因分析:

事故原因

1)直接原因

  • 写完代码后没有做测试,并且因为自大,导致了没有测试就上线。
  • 由于多个需求同时上线,导致上线后没有进行完整充分的验证。

2)间接原因

  • 心态问题,对上线没有那么重视,忽略了支付业务这种核心业务的影响。
  • 没有严格遵守从编码到上线的规范,这次事故是长期的坏习惯导致。

看了这段我是感同身受,其实最严重的事故往往就源于最简单的代码,越是简单的需求,我们就越容易过分自信,觉得肯定没问题,然后就忽略了测试和验证。

除了这些原因外,我还看出了一点,这位同学对业务逻辑不够了解,才导致跳转逻辑写错了。

当然,出了事大家一起扛,公司肯定也有责任,比起追究责任,我们更需要关注如何改进。通过对事故原因的分析,我们一起讨论出了以下的改进方案。

改进方案

我们把改进方案分为 2 类:“对人” 和 “对系统”。

1、规范和把控上线标准

说来惭愧,我在刚开公司不久,就已经写了《开发规范和上线注意事项》文档,比如:

  • 上线前,必须完整测试本次改动涉及的所有功能,例如:权限控制、边界异常处理、页面是否严格遵循设计稿等。
  • 上线后,必须再次对功能进行测试验证。

我也在新人入职手册、开发群的公告里让大家看文档。但是有了规范,大家不遵守、不注意,也没什么办法。

这让我想到了之前张一鸣提到的:很多流程和规范是为了没有意识和习惯的同学准备的,如果团队成员都有好的开发上线习惯,也就没必要定那么多条条框框了。

像这次的事故,不也是由于开发同学缺少测试和线上验证的意识,导致的么?

所以其实除了有上线标准外,还要想办法帮助大家养成遵循规范和标准的习惯。

如果一个人不能保证零 Bug,那就 “找帮手”,比如同项目组的同学共同验证、相互提醒。

我们也因此新增了一条明确的制度:如果有核心业务相关的代码修改(例如支付业务),必须 至少两人 同时测试验证。

此外,之前也提到过,我们由于团队规模不大,有的时候成员可能直接提交代码就上线了,没有经过 100% 的审核。经过这次的事情后,我们再次意识到了代码审查的重要性,哪怕是再小的项目,只要有用户使用,一定要由非本人之外的人再次阅读代码,并且 通过审核后才能上线。还是要强化大家遵循流程和规范的意识。

大厂规范的开发流程就是这样,没办法自己强行推送代码,而且是代码审核后通过流水线打包自动发布上线,最大程度上消除单人、人工失误导致的 Bug。

2、系统改进

本次事故持续 4 个小时,还是直到老鱼简历交流群里的用户反馈,我们才意识到线上出了 Bug,这是一个非常不合理的失误。

如果是大公司宕机 4 小时,大家肯定吃瓜吃的喷香。

怎么改进呢?我们有如下方案,也给大家提供一些思路:

1)所有业务系统下单的页面、以及支付中心本身,都新增反馈入口,比如 “如遇支付异常,请点击联系客服”。让用户有渠道反馈。

2)完善系统的数据波动告警能力。比如一定时间内超过 x 个订单都未支付成功,就通过企微、邮件等方式联系到我们的开发者。

3)系统重试能力。前端后端都要添加自动重试,比如网页上的支付码没加载出来,应该能够自动刷新页面再次展示支付码,而不是让用户 “干瞪眼”。

最后

事情大概就是这样,事后我还安慰小同学:出了问题不可怕,哪怕是非常有经验的大佬也会犯错。

而且体验到了线上 Bug 的紧张刺激,相信他下次一定会更加注意,用公司几百块钱的损失买个自己的教训,我觉得非常值得了。

说个玩笑话,可能大家平时在公司正常运营系统时,感觉不到自己的价值;但等你写出影响收入的 Bug 时,就能立刻意识到自己巨大的价值和 “破坏力”。

我们的后端开发同学听说前端写了 Bug 后,第一时间发来喜报,因为上一次的线上 Bug 也是他写的...

最后,其实这件事还有一些补偿策略,比如可以获取到付款失败的用户 id,在系统内给他们发送通知补偿,尝试挽留一下用户。


往期回顾

1、既然都卡35岁,怎么能工作到65岁?
2、哈哈,有人爬我网站,我把他教育了一顿!
3、马斯克的星舰又"炸"了,但这是最成功的一次
4、程序员疯狂互爆每年薪资变化。
5、没等来OpenAI,等来了Open-Sora全面开源


        

点击关注公众号,阅读更多精彩内容

浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报