CHAPTER 064 / 100
第六十四章:第一次说“顺手改一下”,我就加了班
听这一章
微软云希 · AI 合成朗读 · 13:59
七月初,我说了一句后来特别想撤回的话。
“这个我顺手改一下。”
当时陈工在看查询耗时,小许在旁边翻历史数据。一个老客户的报表查询越来越慢,页面上看一周的数据,还没什么感觉,一拉长到一个月,就得等上一会儿。
我们已经确定先收窄查询,再处理重复取配置的问题,不动订货主流程。
我看见一段日期判断,觉得绕得有点多。
页面选开始日期和结束日期,后面却先按营业日找范围,再拿到一组记录做处理。我想,既然输入的都是日期,把时间区间统一一下,查询还能更直接。
于是那句“顺手”就出来了。
小许问我是不是也覆盖那家夜里关店的客户。
我说看过了,会测。
他说好,便继续去处理自己的任务。
问题在于,我口中的“会测”,当时还只是一项准备完成的承诺。
下午忙起来,它被几组看上去都正确的数据,提前兑换成了“测过了”。
试点更新后,最先打来电话的是田姐。
“有一家店说昨天少了三张单。”
我问哪个页面,她报出名字,正好是我改的那个。
我打开后台查询,又看明细记录。
单子都在。
那一瞬间,我差点松了口气,说一句“数据没问题”。
但我已经知道,客户问的是为什么看不见,不是硬盘里还存没存着。
“我先看下,你让他们暂时别按这张报表核对,我十分钟后给你反馈。”
我把出问题的门店、日期和操作账号记下来,复现了一遍。
三张单有一个共同点:创建时间过了零点,营业日还是前一天。
我盯着屏幕,脑子里突然出现罗店长桌上那张纸,还有田姐说过的那句话。
晚上收尾没弄完,隔天补完,还是算这一轮营业。
我甚至在笔记里给它打了星号。
那个星号此刻像在看我笑。
小许凑过来,看了一眼查询条件,没说话。
我主动开口:“是我把业务日期换成创建时间了。凌晨那几张被划到后一天。”
他点点头:“原来那层就是为这个留的。”
“先回退。”我说。
陈工听完,没有先追着问为什么犯这种错误。
他确认影响范围:只更新了试点客户的查询页面,订单原始数据没动,库存和结算也没跟着这个页面跑。
我把核对结果给他看,又说了回退方式。
“先恢复,再把受影响的日期重新核一遍。”他说,“给田姐一段她能转给客户的话,别发一堆 SQL。”
我写了两版说明。
第一版很像一个技术人员在努力减轻自己的责任:查询口径调整导致部分跨日记录展示偏差,底层数据未受影响。
我自己读了一遍,删了。
第二版说清楚:报表错误使用了下单时间筛选,造成营业日内凌晨补录的三张单未显示;现已恢复原有筛选方式,请重新打开报表核对。原始订单仍完整,已逐条检查。
这段不算好听,但田姐至少不用再替我翻译一次。
回退之前,我们先保留了出问题时的查询条件和结果,避免恢复以后只记得有人说少了三张,却再也说不清当时具体看到了什么。
小许去确认旧版本,我核当前试点范围。田姐把门店那边的操作时间发来,提醒他们先不要拿这份结果继续往下对。
我原来总觉得,问题定位出来,修好就算主要部分结束。真正坐在这里才发现,恢复的每一步还得有人知道自己该做什么,不能把“已经好了”三个字发出去,就让其他人自己猜。
我们按既定流程恢复,确认版本和页面刷新结果一致,再重新查那几天。
第一次核对,小许问我为什么只看条数。
我说三张单都回来了。
他把两边结果摆在一起:“条数一样不代表是同三张。”
我点头,重新按具体单据逐条确认,再核合计和归属。
他说这句话时没有带教训人的语气,可我听进去的分量一点不轻。
因为这不是我不知道的道理。恰恰是心里急着证明已经修好,才想跳过那个看起来很笨的步骤。
小许顺手帮我把核对表排了一下,我把另外几个边界也列进去:正常白天单、跨零点单、后来补录但营业日仍属于前一天的单。
没有扩大到所有模块,只沿着这次动过的范围把证据补齐。
回退完,我跟小许对照旧页面和原始记录,把那几天的数据逐项核了一遍。
田姐在电话里陪门店操作,最后比了总数和几笔具体金额,确认一致。
事情没有发展成通宵事故。
可我看着窗外已经黑下来的天,依然觉得自己这次加班加得非常标准:完全由一句多余的自信触发,后续费用由本人支付。
确认客户那边恢复,陈工叫我和小许再坐十分钟。
我以为他要问我为什么没测到。
他确实问了。
我把测试用例打开,几组数据全在白天,页面结果当然都对。
“你知道有营业日这个概念,为什么还是换了?”
我想了想,说:“当时只把它当成数据归属,没把它当成这个查询的主口径。以为可以通过时间范围统一起来。”
陈工没接话,示意我继续。
“还有就是,这次主要目标是查得快,我把旁边看着绕的地方一起动了。评估范围没跟着扩大。”
这句说完,我自己都觉得很熟悉。
以前我也提醒别人,别在修一个问题的时候随手改一片。轮到自己,理由还是那么动听:既然都看到这里了,顺便整理一下。
小许说他提醒过夜间关店的情况,但没有把具体数据给我,只口头提了一句。
我转头说:“主要还是我改的,这个我来补。”
陈工抬手打断我们。
“不是开分锅会。后面怎么让这个场景不会只存在于你们两个人的记忆里?”
我们把跨零点、补录和普通白天订单单独列了出来,保留一组不带真实客户信息的复现数据。优化继续做,但日期口径不再混在这次改动里。
小许提议给那个字段补上注释,我又加了一条:页面选择的是营业日期,查询必须按营业日字段,不能用创建时间替换。
这行字没有技术难度,却是那个晚上最应该留下来的东西。
散会后,小许收拾包,我跟他说不好意思,耽误他下班。
他说也没多晚,接着看了眼手机,表情突然变了。
“坏了,快递点快关门了。”
我问远不远,他说在住处旁边,今天得拿,不然明天用不上。
我让他先走,剩下的记录我整理。
他站着没动,确认我这边真的没事,才关电脑。
走到门口,又回头说:“最后那一组数据别用客户原表,脱一下。”
“知道。”
他走后,我把需要留下的资料整理到团队能看见的位置,给田姐补了一条说明,才拿起手机。
小璇半小时前问我下班没有。
我打过去,她接得很快,第一句是:“你声音怎么这么虚?”
“因为今天的锅没有悬念。”
我从头讲了一遍,她听到我已经去门店看过,还是把日期改错了,沉默了两秒。
“那你现在知道了。”
“以前也知道。”
“以前知道的是那句话,现在知道的是怎么错。”
我靠着椅背,没有反驳。
她问晚饭吃了吗,我说还没,正准备下楼。
她说那先吃,别一边饿一边反省,反省到最后容易觉得整个职业都该换。
这句话非常有经验。我照办了。
楼下只剩几家店还亮着,我买了份饭,坐在靠门的位置吃。吃到一半,田姐发来消息,说门店重新核对过,没问题了。
我把这条消息给小许和陈工转了一下,终于放下手机。
第二天上午,我主动跟田姐确认,之前那份错误报表有没有被保存出去,需要不需要补发。
她说有一份截图发进过内部群,已经提醒对方更新。
我说好,准备回工位,她叫住我。
“你昨天说明写得还可以,客户知道怎么处理。以后早点告诉我范围,不然他们一说少单,我第一反应就是单真没了。”
我点头,答应下次先说清楚哪些受影响、哪些确认没事。
她没有安慰我“这种小事谁都会犯”,也没有借题发挥说开发靠不住。
该我做的事清楚了,这比一句宽慰更有用。
下午我把重新缩小范围的优化发给小许看。他看完,指出一处还能少查一次配置,我按他的意见改了。
这次我们谁也没说顺手。
正式重新提交以前,我又做了一件以前容易省掉的事:把优化目标写在改动说明的第一行。
只减少查询里的重复工作,保持原来的业务含义。
后面列了验证过的场景,也列了没有碰的地方。代码评审时,别人不用先猜我这次到底想顺便解决多少事。
小许看完说,这样清楚多了,又问我那组跨日数据能不能放到公共的测试材料里,以后他改的时候也用得上。
我说当然。
他把自己以前留的一组特殊商品数据也整理进来,两个人对着目录改了几个名字,防止过几个月谁也认不出“临时测试二”是什么。
陈工后来路过,看见我们还在收拾,问是不是仍有问题没解决。
我说不是,是把这次留下的东西归好。
他点头,提醒别一直收拾到没边界,够下次复现就行。
我笑着说知道,文档也不能无限重构。
到了下午,试点重新验证通过,田姐把反馈发过来,没有再出现前一天那种少单的情况。
我这回没有只回一个好的,而是把确认过的范围补上,注明剩下的观察安排。信息多了一点,其他人却少问了好几轮。
下班时,小许从包里拿出一件刚取到的东西,是他前一天差点没赶上去拿的快递。
我问拿到了啊。
他说差一点,快递点已经开始关灯了。
我又说了一次不好意思。他摆摆手,让我下次改日期记得叫上他。
“以后这块你也熟了。”他接着说,“我哪天漏了,你帮我看。”
我说好。
我知道他没把昨天忘掉,也没有因此把我永远放进不能信任的人那一栏。
这份重新给过来的信任,得靠之后具体怎么做来接住。
下班前,小璇问周末车票有没有变化。
我看了看任务列表,确认需要交代的都已完成,回复没有,按原计划过去。
她发来一个小小的笑脸,说给我留了想吃的那家店。
我把周末前最后几项安排写给陈工,没有因为刚犯过错,就主动说这周我可以都留下。
错误要修,后续要交代清楚,但拿更多无关的时间当作补偿,并不能证明问题已经处理好。
陈工看完,只让我把观察结果放到同一个记录里,别散在聊天消息里。
我照着更新,又告诉小许周末有已经定好的出行,需要我处理的部分今天先过完。他说知道,自己的范围他会看,不需要我一路拿着电脑盯。
听见这句话,我心里那点犯错以后想随时在线赎罪的劲儿,才慢慢松下来。
从前我很容易把同事没有责怪,理解成自己更应该多扛一些。现在想来,别人希望的可能只是我下次判断更准确,交接更清楚,不必把疲惫也交出来当作证明。
我关好电脑,按时走了。
去深圳的事已经和小璇定好,不应该再由我心里的一点不安,擅自改成一个可以随时取消的选项。
我把车票页面打开,检查了一次日期和时间。
检查到“日期”的时候,自己先笑了。
这周我对它已经足够尊重。