那是一个周五的晚上,七点多。我改完一个自认为“无关紧要”的小逻辑—— 把一段计算订单优惠的代码,从按金额排序改成按时间排序。 本地跑通,提测通过,我觉得没什么风险,就在临下班前点了发布。
两个小时后,值班群里开始有人 @ 我:优惠金额对不上。再过半小时, 客服电话被打爆。那一晚,我和同事回滚到半夜十一点,复盘到凌晨。
“无关紧要”是最危险的两个字
事后看,那段代码当然不是“无关紧要”。它身处一个被几十处调用的核心方法里, 而我之所以觉得它无害,只是因为我没往下多想一层: 这个排序结果,会被谁消费?消费方依赖的隐含约定是什么?
很多线上事故的根因,都不是什么高深的技术难题,而是某个人在某个瞬间, 把“我不知道会有什么影响”当成了“它不会有影响”。这两者之间,隔着一整个系统的复杂度。
你对系统的每一次假设,都可能在某个深夜被它狠狠反驳一次。
敬畏心,是承认自己看不全
我后来把“工程敬畏心”拆成了几个具体的习惯,而不是一句口号:
- 任何改动,先问“谁会受影响”。 哪怕只改一行,也要顺着调用链往上走两步,看看上游是否依赖现有行为。
- 周五不上线,临下班不上线。 不是因为懒,而是因为出问题时的响应成本最高。把窗口留给精力充沛的早晨。
- 能用灰度,就不全量。 灰度不是为了显得专业,是为了把爆炸半径控制在你睡得着的范围里。
- 回滚预案比上线方案更重要。 上线前先想清楚:万一炸了,怎么在五分钟内回到从前。
把恐惧变成流程
敬畏心不是让我们变得畏手畏脚、什么都不敢动。恰恰相反, 它是把那种“万一出事怎么办”的隐秘焦虑,外化成可执行的流程—— Code Review、变更评审、灰度发布、监控告警、回滚演练。
当流程替你兜住了底线,你反而敢放心地去做更大的改动。 真正的从容,不是不害怕,而是知道就算害怕的事情发生了,也有一套东西能接住它。
写在最后
那次事故之后,我没有被追责,老板只说了一句: “记住这个晚上,比扣你绩效有用。”他说得对。 一个工程师真正成熟的那一刻,往往不是写出多漂亮的代码, 而是学会了对生产环境保持一种近乎本能的谦卑。
愿我们都能少几次深夜的回滚,多几次安稳的睡眠。