年终奖50元我请假走人,当晚领导找我修系统,我:干不了这活

楔子

“五十块。”周航盯着手机屏幕上那行红色数字,余额变动提醒冷冰冰的,像腊月里的风从窗缝钻进来。工位靠窗,全家福照片里妻子笑得暖,他却觉得指尖发凉。财务主管孙姐端着水杯经过,压低声音:“全组三个,就你最少。赵总说,运维不出业绩,客户看不见。”周航没说话,把手机扣在桌上。窗外有人在挂灯笼,红光一闪一闪,映得那本翻了五年的运维日志本边角发白。

第一章 五十块钱的红包

腊月廿七,上午十点十七分。

周航把手机扣在桌上的动作很轻,像是不想惊动那张全家福里妻子的笑容。可脑子里那行数字还在转——五十块。工资卡余额变动,摘要写着“众享红包”,附言是“春节慰问”。

他在星禾信息干了五年,运维组长,核心系统星禾计费通的实际负责人。每月经手的结算流水过千万,系统数据库表是他一张一张设计的。年终奖五十块。

隔壁工位方卓的手机响了一声,小伙子看了一眼,嘴角动了动,没说话。周航余光扫过去,方卓把屏幕往怀里偏了偏。斜对角的测试组小陈倒是大大方方站起来,跟旁边人嘀咕:“三千八,还行吧,比去年少点。”

周航没抬头,拉开左手第二个抽屉,里面整整齐齐码着几本笔记本,最上面那本封皮已经磨出毛边,五年前刚入职时领的,页脚卷得像海浪。他抽出来,翻开第一页,自己当年的字迹还很清楚:星禾计费通,订单表主逻辑梳理,2019年3月。往下翻,每一版数据库变更记录,每一次线上故障处理过程,每一条客户反馈的根因分析,密密麻麻,两千多页。

他把本子合上,放进自己那个黑色双肩包。

孙姐端着保温杯从财务室出来,路过他工位时脚步慢了半拍。周航抬头看了她一眼。孙姐嘴唇抿着,眼神往总经理办公室方向飞快一掠,然后压低到只有两个人能听见的音量:“小周,你别多想。赵总原话是‘运维不出业绩,客户看不见’,所以……系数给得低了些。”

“低了些。”周航重复了一遍。

孙姐脸上闪过一丝不自在:“全组三个人,方卓两千,新来的小刘一千八。你……五十。孙姐说实话,这数我都不好意思做表。”

周航点点头,没接话。孙姐站了两秒,发现他脸上看不出什么情绪,讪讪地走了。

周航站起来,椅子往后滑了半米。他身高一米七八,在格子间里显得有点局促,手一伸就够到了窗台。窗外楼下有人正往树上挂小红灯笼,一串一串的,风吹过来晃得厉害。

他开始收拾工位。

先是桌面上的东西。一个用了三年的马克杯,杯身印着星禾信息的logo,内壁茶渍已经洗不掉了,他看了一眼,放回原处。全家福相框拿下来,用纸巾擦了擦玻璃面,放进背包夹层。笔筒里几支笔是公司领的,不动。抽屉里还有两盒名片,他抽出一张看了眼——“星禾信息 运维组长 周航”,顺手塞进口袋,其余扔进抽屉深处。

方卓终于忍不住了:“航哥,你……收拾东西干嘛?”

“休假。”周航声音很平,“春节回老家。”

“那也不用……”

“桌面乱,清一下。”周航把背包拉链拉上,那本运维日志本厚厚的,撑得背包鼓出一个方正的轮廓。他直起身,手机屏幕亮了一下,微信上赵广年的头像跳出来,群里发的,一张自拍,端着茶杯坐在真皮沙发里,配文:“兄弟们辛苦了,年终红包聊表心意,明年一起把星禾做大!”

底下已经有人排队回复“谢谢赵总”“赵总大气”。

周航把手机翻过去,屏幕贴上桌面。

他打开企业微信,找到请假申请,填好时间:腊月廿八至正月初七,年假加调休。事由一栏打了“回老家过年”四个字。鼠标悬在提交键上停了两秒。

隔壁方卓还在噼里啪啦敲键盘,大概是真以为周航只是清桌面。周航余光扫过这个跟了自己三年的徒弟,想起上个月发现订单表主键冲突隐患那次,方卓第一个说“航哥你别自己吓自己”。

提交。

系统弹窗跳出来:您的请假申请已提交,待审批。

周航把电脑锁屏,拎起背包往外走。经过前台时,行政小林抬头喊了声“航哥新年快乐”,他点了下头算回应。玻璃门在身后合拢,外面风冷得割脸,他把领子竖起来,摸出手机看了一眼银行短信,五十块还在余额里挂着。

五年,五十块。平均一年十块钱。

他站在写字楼门口的台阶上,把这条短信截了图,存进相册里一个叫“记录”的文件夹——那里面还有三个月前提交的紧急修复方案PDF、赵广年批复“年后再说,别制造紧张”的截图、以及刚才孙姐说话时他下意识按下的录音键。

周航不是个爱较真的人,该干的活从来不推。但此刻他清楚一件事:这五十块不是钱的事。是你把命脉交到人家手里,人家当你是根网线,用的时候插上,不用的时候嫌你占地方。

手机震了一下,方卓发来微信:“航哥,你真回老家啊?系统年前结算高峰,万一……”

周航打了四个字:“找赵总。”

发完他把手机揣进兜里,没再响。风从街角卷过来,他走得很稳,背包里那本五年的运维日志沉甸甸压在肩上,像是这五年唯一的证物。路过街边小超市,门口大喇叭正放恭喜发财,他忽然想起林薇昨晚说的话,钱少点没关系,但不能被人当傻子。

当时他还笑她太计较,现在琢磨琢磨,妻子比自己清醒得多。

走到地铁口,手机又震了。这次是孙姐私发的微信:“小周,赵总刚才问我你请假干嘛,我说你回老家过年。他哦了一声没下文了。你自己心里有数就行。”

周航回了个“谢谢孙姐”,把手机收进口袋,刷卡进站。列车门关上的瞬间,他透过玻璃看见站台广告牌上星禾信息的招聘海报,上面写着“技术驱动,共创未来”。车厢里人挤人,全是拎着年货赶火车回家的面孔,只有他背包里除了换洗衣服,还有一本写满五年系统血脉的日志本。

列车启动,窗外的城市开始往后退。周航闭上眼,手机屏幕又亮了,这次来电显示是赵广年。

他没接,翻了个面,扣在大腿上。铃声在嘈杂的车厢里响了一阵,断了。

过了半分钟,微信弹出来:小周,看到回电话。

周航盯着那行字,没回。列车钻进隧道,车窗变成一面黑镜子,映出他没什么表情的脸。他想起今天早上出门前,林薇帮他把那双旧皮鞋擦干净,说“今年回去给爸妈多包点红包”。五十块,他连个像样的红包都包不出来。

列车驶出隧道,阳光重新灌满车厢。周航把手机铃声调成了静音,找出耳机戴上,点开一首老歌。窗外田野飞速后退,天色亮得刺眼。

背包里那本运维日志本硬邦邦抵着后背,像在提醒他,有些账,过了年也得算。

第二章 干不了这活

腊月廿七晚上七点四十,周航把行李箱从床底拖出来,拉链开到一半卡住了。林薇蹲在地上,从柜子里翻出两件厚毛衣,回头看了他一眼:“你这箱子五年没出过远门了吧,拉链都锈了。”

“凑合用。”周航拿钳子把拉链头掰正,用力一扯,总算拉上了。箱子里除了几件换洗衣服,就塞了两盒给老家侄子带的积木。他蹲在地上,把背包里的运维日志本掏出来,犹豫了一下,又塞回背包侧袋。

林薇没问他为什么还带着那本破本子回老家。结婚六年,她太清楚了,那本子上记的东西比工资条还多。

“明天几点的票?”

“早上八点二十。”周航把箱子扣好,站起来拍了拍膝盖上的灰,“到老家下午两点多,赶得上吃晚饭。”

“你去年就没回去。”林薇把叠好的毛衣放进箱子,语气不重,“爸上个月还打电话问今年回不回,我说回,他才没再念叨。”

周航嗯了一声。他蹲下来重新打开箱子,把那两盒积木挪了挪位置,其实没什么好挪的,他就是不想接话。林薇看了他一眼,没再说什么,转身去客厅收拾年货。厨房里炖着汤,咕嘟咕嘟的声响把屋里的沉默填了大半。

周航坐到沙发上,手机搁在茶几上。从下午到现在,星禾信息的工作群他一条没看,但通知栏还挂着几条未读。他没点开,只是盯着屏幕发了一会儿呆。五十块钱的事他还没跟林薇说,不知道怎么开口。结婚这么多年,他从来没把工作上的憋屈带回家过,但这次不一样,这次是把人当傻子的明抢。

手机突然响了。铃声在安静的客厅里格外刺耳,周航低头一看——赵广年。

他盯着屏幕没动,铃声响了五声、六声,林薇从厨房探出头来,看了一眼,又缩回去了。她知道分寸,从不在他接不接电话这种事上多嘴。

第七声的时候周航接了。

“小周!”赵广年的声音从听筒里炸出来,背景里隐约有键盘敲击声和人在喊什么,“你现在能上网吗?计费模块出问题了,客户那边重复扣费,电话都快打爆了!”

周航把手机从耳边拿远了一点。厨房里林薇关了火,屋里安静得能听见自己的呼吸。

“我刚看后台,十几笔重复扣费,金额不大但是客户闹得凶。”赵广年语速极快,完全不是白天发五十块钱红包时那副从容样子,“方卓说他没动过那块配置,你赶紧远程看一下,密码我知道你有——”

“赵总。”周航开口了。

电话那头安静了半秒。

“干不了这活。”周航的声音不高,也没刻意冷淡,就是平时说话的调子,“我请假了,您找方卓。”

听筒里传来一声明显的吸气声。

“小周你什么意思?”赵广年的语气变了,从着急变成一种被冒犯之后的紧绷,“这都什么时候了你还跟我谈假期?系统出问题是开玩笑的?客户那边要是闹起来,年后整个部门都——”

“赵总。”周航又说了一遍,语速更慢了些,“我下午请的假,您批了。我现在在收拾行李,明天一早的车票回老家。系统的事我上周五在群里说过有隐患,方案发您了,您说年后再说。”

“那方案我看过了,没那么严重——”

“您觉得不严重就行。”周航说,“方卓在,他跟着我做了三年,基础操作没问题。实在不行还有厂商,服务合同里写了紧急响应。”

赵广年沉默了两秒,再开口时语气软下来,像是压着火在哄:“小周,我知道今天那个红包的事你心里不舒服。实话跟你说,那是财务那边按新规走的,我本来想年后单独给你们组补——”

“不用补。”周航打断他,“赵总,我真干不了。您赶紧找方卓吧,别耽误了。”

说完他把手机从耳边拿下来,屏幕还亮着,通话时长停在四十七秒。林薇从厨房门口探出半个身子,眼神里带着一点不解,但更多的是那种不问也知道站谁那边的踏实。

“赵广年的电话。”周航把手机翻了个面扣在茶几上,“系统出问题了,让我回去修。”

“你回吗?”

“不回。”

林薇没再问,转身回了厨房。周航坐在沙发上,听见自己手机又震了一下,是微信。他没看,手指在沙发扶手上敲了两下,心跳比平时快一些,但整个人莫名安定。

过了大概十分钟,手机连续震了七八下。周航拿起来扫了一眼。第一条是赵广年的私聊:“小周,你先看看后台,就二十分钟,我让人把访问权限给你开好了。”第二条隔了一分钟:“年终奖的事是财务口径有问题,我年后给你补,三千,不,五千,我说到做到。”第三条:“你想想这么多年,我什么时候亏待过你?”

第四条是工作群的消息,方卓发的:“@周航 航哥,客户那边重复扣费的量在涨,赵总让我先看一下配置,我不敢动主表,你方便的时候回我一下。”

周航看着那条@,拇指在屏幕上停了几秒,最终什么也没回,退出了群聊界面。

他把手机调成静音,翻过来放在茶几上,起身去厨房。林薇正在盛汤,见他进来也没抬头:“吵完了?”

“没吵。”周航拿了两个碗,“就是把话说明白了。”

“他怎么说?”

“说年后再补年终奖,三千到五千。”

林薇把汤勺放下,转过身看着他,表情很平静,但周航能看出来她在等他说下一句。他摇了摇头:“我说不用补。系统的事我不管了。”

林薇看了他两秒,嘴角动了动,像是想笑又忍住了:“那你还站着干嘛,端汤。”

两个人坐在餐桌前喝汤,周航的手机屏幕朝下扣在茶几上,隔一会儿就亮一下,像一条被晾着的鱼在砧板上弹尾巴。他全程没去看。

八点四十刚过,门铃响了。周航放下碗去开门,门外站着方卓,大冬天的只穿了件卫衣,脸冻得发红,手里攥着手机,屏幕还亮着。

“航哥。”方卓站在门口,呼出的白气在楼道灯下散开,“赵总让我来你家找你。他说打你电话你不接。”

周航靠在门框上:“你进来坐?”

“不坐了。”方卓搓了一把手,“航哥,系统那边重复扣费快到两百笔了,客户群炸了。赵总让我改配置先把计费频率降下来,但我看了下你说的那个主键冲突的问题,这配置一动可能更麻烦。你能不能……”

“我说了不回。”周航的语气不重,但方卓后面的话直接咽了回去。

方卓沉默了一会儿,点了点头:“那我先回去。赵总说今晚必须搞定,不然明天客户要闹到公司来。”

“方卓。”周航叫住他,“别动主表配置。重复扣费你先导出订单号,去后台把批次号关联一下,能看到重复的源头。别改配置,越改越乱。”

方卓眼睛亮了一下,赶紧掏出手机记。周航看他那样子,又补了一句:“日志里搜‘batch_cost’,时间窗口拉宽两个小时。”

“好,好。”方卓一边记一边往楼下跑,跑到一半又回头,“航哥,那个红包的事,我也觉得赵总过分。”

周航摆了摆手,没接话,把门关上了。

回到餐桌前,汤已经凉了。林薇拿勺子搅了搅自己碗里的:“方卓来了?”

“嗯。”

“你教他了?”

“教了几句。救急不救穷。”周航端起碗喝了一口凉汤,味道寡淡了许多,但他一口一口喝完了。

晚上十点刚过,工作群的消息密度开始爆炸。周航虽然退了群界面,但通知栏不停弹消息。他拿起来翻了翻,方卓照他说的拉了批次号,定位到了重复扣费的源头,本来问题已经快收住了,但赵广年嫌这样处理太慢,直接让方卓在后台把计费模块的缓存配置改了,想一键重置。

结果十分钟之后,第二条错乱开始。

方卓在工作群里发了一段话,加了三个感叹号:“@赵广年 赵总,缓存配置一动,订单时间轴乱了,现在扣费记录和订单号对不上,量在涨。”

赵广年在群里回了三个字:“你负责。”

周航把手机屏幕按灭,起身去收拾行李箱。林薇从卧室探出头来:“怎么了?”

“没事。”周航把箱子拉链拉上,立起来靠在墙边,“方卓把配置改错了,赵广年让他自己背。”

林薇走过来,把他搭在椅背上的外套递给他,像是不经意地说了一句:“方卓那孩子,今晚怕是睡不着了。”

周航接过外套没说话,走到阳台站了一会儿。楼下路灯亮着,远处有烟花零星升空又散开,是提前放年假的人家在热闹。他掏出手机看了一眼工作群,最新一条是赵广年发的:“谁能联系上周航,让他看下后台,明天我亲自给他打电话。”

周航把手机锁屏,在阳台的冷风里站了很久,直到林薇在屋里喊他进来洗澡。他转身回屋时,手指在手机侧边键上轻轻碰了一下,屏幕没亮。

他知道,过了今晚,有些事就回不去了。

第三章 越修越漏

腊月廿八早上八点,周航到公司的时候,工位上的电脑还开着,屏幕没锁——昨晚方卓用过他的备用机。

他没动电脑,先把抽屉里那本运维日志本抽出来,翻到最近一页。上面是他手写的系统巡检记录,最后一条停在三天前:订单表主键自增水位异常,建议紧急修复。旁边打了个问号,是方卓的笔迹。

办公区里人不多,一半工位已经空了,桌上摆着没拆完的年货盒子。孙姐从财务室出来倒水,看见他,远远点了个头,嘴唇动了动,没说话。

周航回工位坐下,开始整理交接文档。他干活习惯留底,系统里每个模块的部署记录、密码清单、客户侧联系人,分门别类存了三个文件夹。他把这些打包拷进一个U盘,又在桌面建了个文件夹叫“交接”,拖进去。动作不快不慢,像是平常任何一个工作日的早晨。

九点刚过,方卓从机房方向过来。他脸色发灰,眼皮肿着,衬衫袖口卷到手肘,手里捏着一张打印出来的数据表。

走到周航工位旁边,方卓停了一下,嘴唇动了动,最后什么都没说,径直往赵广年办公室去了。

周航继续整理文档,听见办公室里赵广年的声音先是压着,然后一路走高。

“你昨晚动缓存之前,跟谁商量了?”

“您让我改的。”方卓的声音比平时低。

“我让你改你就改,你知不知道那个模块的时间轴是周航当初设计的时候编了三层逻辑的,你动一下,上面全乱套。”赵广年的嗓门彻底打开了,隔壁座位的同事都悄悄抬头,“你技术行不行?不行趁早说。”

办公室里安静了两秒。

然后方卓的声音突然拔高:“周哥三个月前就打了方案,说主键冲突年底肯定爆,您批的‘年后再说’,现在怪我?”

整层楼都听见了。

周航坐在自己工位上,手指搭在键盘上没动。他能想象方卓现在的表情——眼睛红着,脖子梗着,跟大学时被导师冤枉了的样子一模一样。他带方卓六年,知道这孩子平时再怂,真被逼到墙角也会咬人。

办公室的门被拉开一条缝,又关上了。里面安静了一会儿,赵广年的声音重新响起来,这次换了一种腔调,压低了,听不清内容。

周航继续整理文档。孙姐又出来倒了一次水,经过他工位时脚步放慢,手指在桌角轻轻敲了两下。周航抬头看她,孙姐冲办公室方向努了努嘴,什么也没说,走了。

十分钟后,方卓出来了。他眼眶确实红着,但没哭,走到周航旁边,把手里的数据表放在桌上。

“航哥,重复扣费扩到快九十万了。昨晚缓存一改,订单时间轴全部错位,现在后台对不上账的订单有一千七百多笔。”他声音哑着,但很镇定,“赵总说让你交接完赶紧走,这边不用你管了。”

周航拿起那张数据表扫了一眼,数字他太熟悉了——昨晚他在家远程看过日志,预估量级不会低于八十万。他把表放回桌面,看着方卓。

“你昨晚拉的那个批次号,是对的方向。”

方卓愣住了。

“重复扣费的根子在订单表主键,缓存只是把时间轴打乱了,两码事。你拉批次号定位源头是对的,后面改缓存是被催的,不怪你。”周航把U盘从电脑上拔下来,放在桌上,“这里面有系统的完整部署记录,包括订单表的设计逻辑。你要看就看,不看就存着。”

方卓盯着那个U盘,喉结动了一下。

“航哥,你什么时候走?”

“下午签完交接单就走。”

“那系统……”

“赵总说了,不用我管。”周航站起来,把椅子推回桌下,桌上的全家福相框他顺手收进背包夹层,“你按我日志本上写的巡检顺序走一遍,先把对账脚本跑起来,别的等通知。”

这时候赵广年办公室的门开了,赵广年探出半个身子,目光扫过整个办公区,最后落在周航身上。

“周航,你进来一下。”

周航把背包带子搭上肩,转身看着赵广年,语气像在汇报一个普通的工作安排:“赵总,我九点半去人事办交接,时间到了。”

赵广年脸色变了一下,但当着这么多人没发作,只是抬了抬下巴:“那你先办,办完过来。”

周航点了下头,往人事部方向走了。经过方卓身边时,他脚步没停,低声说了一句:“对账脚本跑起来之前,什么都别改。”

方卓攥着那个U盘,点了点头。

人事部在走廊尽头,周航走过去的时候,听见背后办公区里赵广年又开了腔,这次语气缓和了不少,像是当众找补:“方卓,你把周航的方案找出来,咱们今天现场对一下,能补救的先补救。”

方卓没应声。过了几秒,他声音不大,但整层楼都能听见:“方案在周哥工位电脑桌面上,文件名叫紧急修复方案,您自己点开看吧。三个月前就发您邮箱了。”

办公区里没人说话。有人低头假装看屏幕,有人端着杯子去了茶水间。

周航没回头,脚下步子没变,拐进走廊的时候,听见身后传来赵广年关办公室门的声音,比平时重了不少。

人事部的交接单填起来快,周航签了字,把工牌放在桌上。人事专员小声问他:“周哥,年后的社保,公司这边先给您停还是……”

“停吧。”周航把背包拉链拉好,“年后我不来了。”

走出人事部,他没有回办公区,直接从侧楼梯下到一楼。外面风很冷,吹得门口那棵景观树哗哗响。他站在台阶上掏出手机,看见工作群里新消息刷了十几条,最上面一条是客户群截图——有客户发了重复扣费的对账单,后面跟了一长串问号。

方卓在群里回了一条:“正在核。”

赵广年紧接着发了一条:“大家不要慌,已经安排处理。”

周航把手机揣进口袋,走下台阶。风灌进领口,冷得人一激灵。他沿着公司楼下的那条街往地铁站走,路过一家还在营业的早餐铺,蒸笼冒着白气。他站了一会儿,买了一袋豆浆,捧在手里慢慢走。

走到地铁口的时候,手机震了一下。是方卓发来的私信,就一句话:“航哥,方案我打开了,里面写了如果爆发该先锁哪几张表,赵总问您能不能回来指导两小时,算加班,三倍工资。”

周航喝了一口豆浆,想了想,回了四个字:“我在交接。”

他把手机放回口袋,顺着阶梯走进地铁站。身后那栋写字楼的灯还亮着,十七层那扇窗户隐约能看见人影走动。周航没抬头,刷了卡进站,消失在早高峰的人流里。

第四章 三个月前的方案

周航到家时,林薇正在客厅打包行李。两个行李箱摊在地上,一个装满了给两边老人买的保暖内衣和糕点,另一个半开着,里面整整齐齐码着周航的衣服。

“回来得比我想的快。”林薇抬头看了他一眼,把手里叠好的毛衣放进箱子,“交接办完了?”

“办完了。”周航把背包放到鞋柜上,换了拖鞋,走到客厅中间站了一会儿,像是在找什么东西。

林薇看出他有心事,没追问,继续低头叠衣服。过了半分钟,周航转身进了书房。

书房不大,靠墙一排书架,最上面那层堆着这些年攒下来的技术资料和项目文档。周航搬了把椅子,踩上去翻找。书架上落了一层薄灰,他一本一本抽出来翻,最后从最底层抽出一个蓝色文件夹。文件夹已经有点卷边,封面上用记号笔写着“星禾计费通—订单表重构—2023.10”。

他翻开文件夹,里面是一个订好的打印稿,右下角贴着便利贴,写着“紧急修复方案(订单主键冲突应对)”。方案一共十二页,从问题描述、成因分析、影响范围到具体的修复脚本和回滚预案,写得清清楚楚。第二页右上角有一行手写批注,是赵广年的字迹,蓝色圆珠笔,潦草但好认:“年后再说,别制造紧张。年底大家先冲业绩。”

周航盯着那行字看了很久。

三个月前,是十月中旬。那时候系统刚上完新版本,他做压力测试的时候发现订单表在并发写入场景下会出现主键冲突,概率不高,但在年终结算高峰那样的数据量下,概率会被放大几十倍。一旦触发,计费模块会把同一笔订单写入两次,用户银行卡上就会扣两遍钱。

他当时拉着方卓连夜写了这份方案,第二天一早就发邮件抄给赵广年和产品部。邮件里写得很直白:“建议本周内完成修复,最迟不超过十月底。如果拖到十二月,风险不可控。”

赵广年两天后回复了邮件,就一句话:“知道了,年后排期。”

周航不放心,又去找他当面说。赵广年靠在老板椅上,手里盘着一串珠子,笑着跟他说:“小周,你是不是工程师思维太重了?年年年底都有人喊系统要崩,哪年真崩了?你先把眼前的新客户上线服务好,这东西年后修也不迟。”

“赵总,这次不一样。”周航站在他办公桌前,把打印出来的方案递过去,“订单表是核心表,一旦出问题,不是几分钟能恢复的。”

赵广年接过方案翻了两页,就在第二页上写了那行批注,然后还给周航:“行了,我看了。年后再说。你也别在组里制造紧张气氛,年底了,大家都想安安心心拿个红包过年。”

周航拿着那份方案走出总经理办公室的时候,在走廊里站了足足半分钟。方卓正好路过,看了一眼他手里的纸,小声问:“赵总批了?”

“批了。”周航把方案卷起来,“年后再说。”

方卓当时没再问,但周航知道,这个刚带了一年的徒弟已经看懂了——方案被搁置了。

这之后,周航把方案存进了系统共享盘,打印稿收进了文件夹,然后按赵广年的要求,带着方卓把年底的重点转向新客户上线。但这份方案他始终没有扔。他隔三差五会去看一眼订单表的运行日志,盯着主键冲突的告警数量从每周两三条涨到每天十几条。到腊月的时候,告警已经压不住了,每天上百条。但赵广年从不看技术告警,只看客户投诉。没有客户投诉,在他看来就是没问题。

直到今天,腊月廿八,问题终于爆了。

周航从书房出来的时候,手里拿着那份打印稿。林薇已经把衣服叠完了,正坐在沙发上核对回老家的车票。她抬头看了一眼周航手里的文件夹,问:“拿的什么?”

“三个月前我提交的一份方案。”周航坐到沙发上,把打印稿摊开在茶几上,“系统今天出的问题,这里面全写了。怎么发生、为什么会发生、怎么修、修完怎么回滚,都写了。”

林薇凑过来看。她是做会计的,看不懂技术细节,但能看懂逻辑。她翻到第二页看到赵广年的批注时,手停了一下。

“年后再说,别制造紧张。”林薇把那行字读了出来,然后抬头看周航,“三个月前的东西,他连看都没认真看?”

“看了,翻了两页,觉得我在吓唬人。”

林薇把打印稿放回茶几上,靠在沙发背上,沉默了一会儿。客厅里很安静,楼下有小孩在放鞭炮,隔着窗户传进来,闷闷的几声。

“那现在呢?”林薇转过头看着周航,“你早上在公司拒绝他了,交接也办了,现在为什么又把这份东西翻出来?”

周航没回答。

“你在想什么,我大概能猜到。”林薇的声音很平,没有责备的意思,“你是觉得,如果你回去修,其实几个小时就能把问题解决。方案都在,你什么都知道,你甚至知道第一步该锁哪张表。”

周航低下头,看着茶几上那份打印稿。第二页那行蓝色批注扎眼得很。

“但是我要问你一句。”林薇把身子转过来,正对着他,“你现在如果回去,是想让他承认你对了,还是想证明你三个月前没说错?”

周航张了张嘴,没说出话。

“这两个东西,听起来差不多,其实差很远。”林薇说,“如果想让他承认你对,那我问你,他承认了你又能怎么样?年终奖补给你?道歉?然后呢?你继续在他手底下干,等下一次他再把你写的东西压三个月?”

“我不是……”

“那如果是想证明你三个月前没说错,就更没意思了。”林薇打断他,“系统今天已经出事了。事实已经证明你是对的。你不回去,它继续出问题,就更能证明你对。但这有用吗?你还是没拿到你该拿的东西。”

周航靠在沙发上,半天没动。

林薇说得很对。他被问到点子上了——如果他回去修,修完了,然后呢?赵广年说一句“小周还是你厉害”,然后呢?补五千块年终奖,然后呢?方卓继续顶包,赵广年继续“兄弟感情”,明年继续被压方案?

这些问题他在公司的时候没来得及想,在地铁上也没想透。现在被林薇一句话戳破了。

他原本以为自己拒绝赵广年,是因为不甘心被当成工具。但那份方案从文件夹里翻出来的时候,他发现自己心里其实还有一层没说破的东西——他太想让赵广年亲口说一句“你当时是对的”。

“我答不上来。”周航终于开口,声音有点哑,“你说得对,我得想清楚这个事。”

林薇伸手拍了拍他的胳膊:“不急,明天才回老家。你今天晚上想清楚就行。不管你怎么决定,我都支持你。但别再被人当傻子用了。”

周航把那份打印稿重新收进文件夹,放在茶几底下,起身去厨房倒水。走到厨房门口时,他回头看了一眼茶几,那份打印稿露出来一个角,第二页上那行“别制造紧张”的蓝色批注若隐若现。

他喝了一杯凉水,头脑清醒了些。手机放在餐桌上,屏幕亮了一下,是方卓又发来的消息,没点开。但他站在厨房里,听着外面断续的鞭炮声,忽然想到一件事——他三个月前写的修复脚本,里面有一个关键参数是跟订单表的实时状态绑定的。现在系统已经出了故障,订单表的状态跟他写方案时不一样了。如果直接跑,脚本能止血,但没法根除。

换句话说,就算他现在回去,光靠那份方案也修不彻底。他需要重新对一遍数据。

而这个判断,只有他自己知道。

周航放下杯子,走出厨房,看见林薇正在关客厅的灯。她回头看了他一眼,没说话,只是把那份文件夹往茶几里面推了推,像是怕他出门的时候顺手带走。

“我出去走走。”周航说。

“穿上外套,外面冷。”

周航拿起外套和手机,推门出去。楼道里的声控灯亮起来,照着他往楼梯口走。他没有坐电梯,一层一层走下去,脚步声在空旷的楼道里回响。走到一楼的时候,手机又震了。这次他点开了,是方卓的语音消息,只有八秒。他按下播放,方卓的声音有点抖:“航哥,客户那边已经有人在群里说要解约了,赵总让他们稳住,说今天肯定能解决。但我看日志……问题比早上更大了。”

周航把手机握在手里,站在单元门口。风从楼缝里灌进来,冷得他缩了缩脖子。远处有人在放烟花,一小朵一小朵炸开在灰蒙蒙的夜空中。

他站了很久,最后拨通了方卓的电话。响了不到两声就接了。

“你现在能动服务器吗?”周航问。

“能。”

“先什么都别跑。把订单表的锁级别调高,然后把告警日志发我一份。”

电话那头方卓愣了一下,然后声音一下子踏实了:“好,马上。”

周航挂了电话,没有转身回家,而是往小区外面走。他知道自己终究还是放不下那套系统。但这一次,他回去的原因跟赵广年无关,跟年终奖无关,甚至跟证明自己对错都无关——他得让方卓留住客户,让那套系统停下来。

至于林薇问他的那个问题,他还没完全想明白。但他知道自己已经开始往答案的方向走了。

第五章 年礼成了烫手山芋

楼道里的声控灯还没灭,周航站在单元门口,听见楼上自家房门被拉开,林薇的声音从楼道里传下来:“周航?你是不是打算出去?”

他往回走了两步,仰头看见林薇披着羽绒服站在二楼转角,手里拎着他的围巾。

“先上来。”林薇说,“外头站着能想明白什么。”

周航回了屋。林薇把围巾往沙发上一搭,没问他要去哪,也没问方卓说了什么。她进厨房热了杯牛奶放到他面前,然后坐到餐桌对面,把那份修复方案的打印稿往他跟前推了推。

“刚才你下楼的时候,我翻了一遍。”林薇说,“第7页那个参数注释,写的是订单状态必须等于待结算才能触发补偿逻辑对吧。”

周航点头。

“现在系统里订单状态已经乱了,所以就算跑这个脚本,也只能补一部分。”

“你什么时候看懂的。”周航问。

“看不懂细节。但表格左边一列,正常说明和紧急说明对不上,这我能看出来。”林薇用指尖敲了敲打印稿,“你写了三个月前就发现的问题,当时为什么不走?”

周航端起牛奶喝了一口。温度正好,不烫嘴。

“当时觉得还能再忍忍。”

“那现在呢?”

他没回答。手机屏幕又亮了,方卓发来日志包。周航点开看了一眼,眉头皱起来,手指在屏幕上快速划了几下,放大了一段错误堆栈。配置参数被改坏了,而且改的人没有备份原始文件。方卓在日志末尾附了一行字:“航哥,我是不是把事搞更大了。”

“你先稳着。”周航回了条语音,“别让赵总找外部的人来动服务器,越动越糟。”

林薇看着他,等他把手机放下。

“明天腊月廿八,你原计划是回老家。”她说,“东西都收拾好了。”

“嗯。”

“你要回公司?”

周航摇头:“赵广年现在没找我。他要是今晚打了,我白天那个态度已经给了答案。”

林薇没再追问,起身去阳台收衣服。楼道里传来楼下邻居关门的声音,闷闷的,像谁家在搬重物。周航坐在沙发上,把日志逐条过了一遍,手里的笔在运维日志本上画出几个关键节点。方卓的问题是把时间戳服务重启了,导致同一条订单在不同计费周期被重复扫描。这不是脚本能解决的,得从数据库层面锁死唯一索引。

他合上本子时已经过了十一点。林薇从卧室出来,说手机充上电了,让他早点睡。周航把本子塞进茶几抽屉,压在那份打印稿上面。

躺下之后他没立刻睡着。天花板上有对面楼照过来的光斑,慢慢移动,最后消失。他翻了个身,听见林薇呼吸均匀,应该已经睡了。脑子里还在跑那些数据表,一笔笔订单像列队的士兵从眼前过,标记、匹配、抵扣。他太熟悉这套系统了,熟悉到能在梦里画出ER图。

第二天早上九点,门铃响了。

周航从卫生间出来时,林薇已经开了门。客厅里站着赵广年,穿着黑色长款羽绒服,脚边放着两瓶酒和一箱橙子,箱子上贴着红色礼盒标签。他比平时显得拘谨,手插在兜里又拿出来,冲周航笑了笑。

“路过这边,想着还没给你们拜个早年。”赵广年说,“林薇也在啊,正好正好。”

周航没让座,也没接东西。林薇看了他一眼,去厨房倒水。

赵广年自己把东西提进来放在玄关,换了拖鞋走到沙发边上坐下,扫了一眼茶几——上面干干净净,那份打印稿已经被周航收进了抽屉。赵广年似乎松了口气,开口就是:“航哥,咱们兄弟多少年了,我说话不绕弯子。方卓确实顶不住,昨晚又出了新问题,客户那边已经炸了。我不是来求你回去上班,我就是想跟你商量,年后咱们技术这块好好调整一下,你来抓总,我给你配人,股权的事年后开会定。”

周航坐在旁边的单人沙发上,没说话。

赵广年继续:“年终奖那个事,是财务那边口径没统一,我后来才知道。我已经让孙姐重新核了,年后补,五千起步,这个数不会亏你。”

林薇端了杯白水放茶几上,赵广年道了声谢,端起来喝。周航看见他手腕上那块表还在,是两年前公司赚钱时买的,当时赵广年在群里发照片,配文“兄弟们辛苦了”。

“赵总,”周航开口,“创业兄弟情这话你每年都说。三月我提紧急方案,你说年后再说。六月我扛过一次宕机,你说公司记着。十月我加班半个月做灾备演练,你说年底不会亏待我。”

赵广年脸上的笑淡了一层,但还挂着:“是是是,这些我心里都有数。所以今天才亲自过来,航哥,年后技术股,我拍板。”

周航站起来,从抽屉里拿出那份打印稿,放到茶几正中间。三页纸,订书钉已经有点生锈,纸边微微卷起。他把第一页翻开,推到赵广年面前。

“我不谈感情,我就问您,这三页纸您批没批。”

赵广年低头看了一眼。页眉上印着“紧急修复方案-计费模块主键冲突”,日期是三个月前。右下角有审批栏,空的。当时周航把电子版发到赵广年邮箱,赵广年回了那句“年后再说,别制造紧张”,没签字。

“这个……”赵广年往后靠了靠,“当时年底事情多,我确实压了一下。但我跟你讲,我不是不重视,我是想年后拉通会……”

“现在系统里重复扣费保守估计四十八万,涉及一千七百笔订单。”周航把第二页翻过去,指着数据影响范围那一段,“您现在跟我说股权,说兄弟感情,我想问您一句——您真觉得技术部门的价值是靠这些词来定的吗?”

赵广年脸色终于挂不住了。他站起来,手在裤子上蹭了一下,声音压低:“周航,你这就没意思了。我亲自上门,两瓶酒加年货,诚意你看到了。你不就是嫌年终奖少吗?五千,年后一分不少。但你得先回去把系统稳住,客户那边等不了。”

“我回去可以。”周航说,“但条件是先签字——这份方案必须作为公司正式运维文件归档,紧急修复方案十二小时内必须响应。然后谈后面的事。”

赵广年愣了两秒,嘴角抽了一下:“你这不是逼宫吗?带方案谈条件,你拿客户要挟我?”

“客户是您要丢的,方案是我三个月前给的。”周航把茶几上的打印稿收起来,叠好,放回抽屉。“赵总,年货您带回去。林薇,帮赵总把东西提门口。”

赵广年站着没动,胸口起伏了两下,最后拎起酒和橙子,走到门口换鞋。他拉开门,回头看了周航一眼,想说什么,嘴唇动了动,还是没说出来。门关上后,楼道里传来他下楼的脚步声,比来时快得多。

林薇把没动过的那杯水倒掉,杯子放进水槽。

“刚才那些话,你憋了多久?”她问。

周航坐回沙发,把运维日志本翻开,翻到最后一页有字的地方。上面写着今天日期和一行备注:方卓日志分析,需锁唯一索引,脚本需重调参数。

“憋了三个月。”他说。

林薇走过来,站在他身边看了一会儿那个本子,忽然说:“你昨晚下楼,其实是打算去公司的吧。”

周航没否认。

“那怎么又回来了?”

“方卓电话。他说问题比早上更大了。”周航合上本子,“赵广年不知道,现在就算他把方案签了,光靠这份脚本也修不彻底。得重新对一遍数据。但这个判断我谁都没说。”

林薇看了他一眼:“你告诉方卓了吗?”

“没有。”

“那你打算什么时候说?”

周航望向窗外。小区里有孩子在楼下跑,手里攥着刚买的摔炮,一个个往地上砸。他收回目光,拿起手机,翻到方卓的对话框,打了几个字又删掉,最后把手机放进口袋。

“等赵广年把那份方案签了再说。”

第六章 山海来了电话

赵广年走后不到半小时,周航的手机又响了。

这次来电显示是个陌生号码,本地座机号。他接通,对面声音很客气:“请问是周航吗?我是明州商贸信息部的,姓陈。我们接到星禾那边的通知,说计费系统今晚可能要临时停服,想问一下你们这边什么情况。”

周航愣了一下。星禾根本没发过停服通知,他自己就是运维组长,停服发布流程他比谁都清楚。客户打电话来问,说明星禾那边已经开始乱了,信息从内部漏到了外面。

“我不太清楚。”周航说,“您直接问赵总吧。”

对方犹豫了一下:“赵总手机关机了。”

周航看了一眼墙上的挂钟,晚上九点出头。赵广年从自家离开还不到半小时,关机的可能性只有一种——他知道自己兜不住了,选择了暂时躲。

“建议您明天早上再联系。”周航平静地说,“今晚系统可能有波动,让业务那边先手工对账。”

挂了电话,林薇从厨房探出头:“谁啊?”

“明州商贸,星禾最大的客户。”周航把手机放到茶几上,“赵广年手机关机了。”

林薇擦着手走出来,在沙发扶手上坐下:“他刚才不是还在这儿跟你谈条件吗?”

“谈不拢就走了。估计客户那边电话打爆了,他接不过来。”

“那你管不管?”

“不管。”周航说得很干脆,“系统没到崩的程度。计费模块重复扣费,是数据层面的问题,业务跑不起来,但不会丢数据。方卓应该能撑到明天早上。”

话音刚落,手机又响了。这次是个手机号,周航看了一眼,没接。

林薇凑过来看了一眼屏幕:“谁?”

“曹立民。以前跟我在同一家公司干过的,后来去了山海科技。”

“这么晚找你,肯定也是听说星禾的事了。”

周航点头。他在公司十年,行业圈子里认识的人不少。星禾计费系统出问题的事,从晚上八点多开始,在几个技术群里已经有动静了。方卓那通电话之后他就知道,消息传得比他想象的快。

他回拨过去。

“老周,终于通了。”曹立民声音没什么寒暄的意思,直接就说,“你在哪?”

“在家。”

“星禾那边是不是出事了?”

“你消息挺灵。”

“不是我灵,你们赵总晚上在行业群里发了一条求援信息,问谁认识做计费系统紧急处理的团队。发完不到三分钟就撤回了,但截图已经传开了。”曹立民停顿了一下,“老周,这事你打算怎么收场?”

周航靠在沙发上,盯着天花板。“我不收场。我请假了。”

曹立民在电话那头笑了一声,不算轻松,更像无奈。“行,你有你的脾气。那说正事——山海科技这边缺个核心系统负责人,月薪三万起步,年终按项目分红。团队刚搭架子,五个人编制,你来了直接带。你有没有想法?”

周航没立刻回答。林薇在旁边坐着,虽然听不到电话内容,但从他的表情大概猜到了是什么事,轻轻碰了碰他的胳膊。

“我现在没心情跳槽。”周航说。

“我知道你现在心情不好。”曹立民语气放平了,“但你听我一句。技术圈里谁不知道星禾那个计费通是你一个人搭起来的?当年公司小,你从无到有建表、写规则、跑测试,客户从三家做到几十家,系统没出过大事。赵广年给你发了什么?五十块?”

周航沉默。

“这事圈内已经传开了。”曹立民继续说,“今天下午就有人在小群里发截图,说星禾年终奖只有五十,运维组长拿得最少。老周,你不是笑话,你是案例。行业里都知道你干了什么、拿了什么。你觉得你还有必要在星禾耗下去?”

周航把手机换了个耳朵,低声说:“曹,我不是赌气辞职的人。我有房贷,有孩子,年底换工作不是小事。”

“我没让你赌气辞职。”曹立民说,“我是让你看清楚你现在值多少。三万是保底,你进来之后带核心系统,明年平台上线,年终分红至少是这个数的两倍。你在星禾干了十年,拿过多少年终?超过两万没有?”

周航没答。事实是,最高那年拿了八千。

“你有技术、有文档、有底线。”曹立民一字一句说得很清楚,“缺的只是不把你的底线当儿戏的人。山海这边技术总监是我,我说了算。你不用现在就答复我,年后给我回话就行。”

电话挂断后,周航把手机扣在茶几上,好一会儿没动。

林薇问:“山海科技?就是那个做企业级数据平台的?”

“嗯。”

“什么条件?”

“月薪三万,带团队,年终分红。”

林薇倒吸了口气。她是做会计的,对这个数字很敏感。周航在星禾现在的月薪是一万二,年终奖除外。五十块也是“年终奖除外”的部分。

“你怎么说的?”

“我说现在没心情跳槽。”

林薇看了他几秒,没急着说话。她站起来去厨房倒了两杯温水,一杯放到周航面前,一杯自己捧着,靠在餐桌边。

“曹立民这人靠谱吗?”

“靠谱。技术出身,说话算数。当年共事四年,从没跟人玩过心眼。”

“那你犹豫什么?”

周航拿起杯子喝了一口水。他犹豫的其实不是曹立民,不是三万还是五万。他犹豫的是方卓,是那个系统。计费通的核心数据库是他从零搭起来的,几百张表、上千个字段、几万行规则脚本,每一行都是他的手笔。他清楚那个系统还有哪些隐患没修,清楚方卓现在的水平处理不了最坏的情况。他走了,系统不一定立刻就崩,但出问题是迟早的事。

赵广年不懂这些,只当运维就是“看着系统别挂”。但周航知道,自己那些年写的每一份文档、做的每一次备份、留下的每一个修复方案,才是这系统活到今天的真正原因。

“我不是舍不得星禾。”周航终于开口,“我是舍不得那个系统。”

林薇放下杯子,走过来在他旁边坐下。“系统是你建的,但它不属于你。你留在星禾,赵广年就会一直拿感情和年终奖来给你定价。你觉得值多少,得有人愿意出这个价。”

周航转头看她。

“曹立民不是说了吗?”林薇说,“你不缺技术,缺的是不把你的底线当儿戏的人。你仔细想想,这话对不对。”

窗外又有孩子在放摔炮,噼啪的声音一阵一阵传进来。周航把运维日志本重新翻开,翻到自己在三个月前写方案时夹在里面的一页草稿。那是他手写的紧急修复思路,上面画了数据表结构、标注了冲突点、列出了修复步骤。他当时写完这份东西跑了三遍验证,确认万无一失才提的方案。

赵广年批了四个字:“年后再说。”

现在还没到年后,系统已经出事了。

周航把草稿纸抽出来,对折,放进外套内兜。然后拿起手机,打开方卓的对话框,打字:“明天我回公司。你先别动任何配置。锁表的事等我到了再说。”

发完,他把手机放下。“睡吧。”他对林薇说,“明天还有硬仗。”

林薇去关客厅的灯。周航坐在沙发上没动,听见她在卧室里轻声叹了口气。

他知道那声叹气不是担心明天的系统,是担心他。因为周航这人一旦决定回公司,就说明他已经想好了——这一趟回去,不只是修系统,是回去做个了断。

夜深了。手机屏幕亮了一下,是方卓回的消息,只有两个字。

“好的。”

周航盯着那两个字看了一会儿,把手机翻扣在床头柜上。明天,腊月廿八,他要去把赵广年拖了一个月、三个月、甚至一年的那些事,一件一件全部摆平。至于山海科技那边,他并不急着答复。但曹立民今晚说的那句话,已经像一根钉子扎进了他心里。

他的底线,值多少钱,该由市场说了算。

第七章 徒弟的眼泪

手机响的时候,周航刚把最后一件换洗衣服塞进行李箱。腊月廿八要回林薇娘家,东西收拾了大半。他看了眼屏幕,来电人:方卓。时间是凌晨零点四十七分。

周航接起来,没先开口。

电话那头先是一阵键盘敲击声,噼里啪啦的,像在翻什么数据。然后方卓的声音才传过来,哑的,明显熬了不短的时间:“师父,你睡了没?”

“没。”

“出事了。”方卓顿了一下,“计费模块的重复扣费刚才又冒出来一批,这次症状不一样,之前是重复,刚才是漏单。有十八笔订单根本没进计费队列,客户那边已经收到自己用户的投诉了。明州商贸的人刚才直接打给赵总,说要索赔。”

周航从床边站起来,走到客厅。林薇抬头看了他一眼,他没说话,只把手机换了个手拿。

“赵总怎么说?”

“赵总让我明天一早到公司,他要跟客户视频解释。”方卓的声音里透着掩饰不住的慌,“师父,我顶不住。我现在连问题在哪儿都找不到。日志翻了几百兆,全是报错,我看着那些堆栈,脑子是空的。”

周航听见背景里有烟味,方卓大概抽了不少。他坐到沙发上,把茶几上自己的运维日志本翻开,翻到昨晚夹草稿纸的那一页。方卓还在讲,语速越来越快,像怕停下来周航就会挂电话:“我昨晚改的那个配置,回滚了一半没敢全滚,怕越弄越乱。赵总说明天客户那边如果能谈下来,让我写个情况说明。师父,情况说明怎么写?我连问题定性都说不清楚。”

“你没碰数据表吧?”

“没有,你说了锁表的事等你到了再说,我就没动。”

周航在心里松了口气。数据库没被乱动,事情就还在可控范围。他让方卓把最近的错误日志压缩一下,用内部通讯软件传过来。电话没挂,方卓那边动手操作,鼠标点击和键盘声混在一起。周航走到书桌边打开笔记本,连上家里的网。

文件传过来,周航解压后先看时间轴。报错集中在昨夜十点以后,时间点和他预期的完全一致。他把日志拖到中间,找到第一处异常,然后往回翻了十几行,看到了那条他再熟悉不过的报错序列。订单表主键冲突错误码,后面跟着两行关联的插入失败记录。和他三个月前提交的紧急修复方案里描述的爆发路径一模一样——先是在高并发写入时短暂锁等待,然后触发主键重试机制,重试逻辑里的时间戳没做去重,导致同一笔订单在重试窗口里被二次计费。

漏单则是另一个分支。方卓改配置时把计费队列的批处理大小调大了,想缓解压力,结果适得其反。数据积压到临界点之后,新的订单直接排队失败,被挤出了处理窗口。

这两件事叠加在一起,才造成了今晚的双向故障。

周航把截图和关键日志行圈出来,在对话框里发给方卓。

“看到了吗?”

方卓那边安静了两秒,然后发出一声低低的吸气声。“这不就是……你方案里写的那个?”

“是。”

“那现在怎么办?”方卓声音里终于有了明确的方向感,但底下压着的那层不安更重了,“赵总说明天视频会我也得在,客户肯定要问谁负责。师父,你说我是不是得准备卷铺盖了?”

“先别想那些。”周航靠在椅背上,目光停在屏幕上那行报错日志。三个月前他写方案的时候反复验证过这个场景,推演过修复步骤,甚至连修复窗口期该选哪个时间段都标注清楚了。方案在赵广年抽屉里压了三个月,现在故障按他预测的方式发生了。他该愤怒的。但电话那头是方卓,跟了他三年、连调个参数都要先问一句“师父你看行吗”的方卓。愤怒解决不了方卓明天要面对的客户视频会。

“你听我说。”周航开口,语气很平,“你现在别去动配置,也别去重启任何服务。把这三个表锁了——订单主表、计费队列表、重试日志表。用只读模式锁,别加排他。”

“锁了之后呢?”

“锁了之后你回去睡觉。”

“睡觉?”方卓的声音拔高了一截,“师父,都这样了我怎么睡得着——”

“睡不着也得睡。明天上午九点之前你什么都别动,等我到了再说。”

电话那头沉默了好一会儿。周航听见方卓点了一根烟,打火机啪的一声。然后方卓说:“你要来?”

“我说了,明天上午我到。”

“可你不是请假了吗?赵总昨天还在办公室说……”

“方卓。”周航打断他,“你锁表,睡觉。别的我来处理。”

方卓没再说什么。过了几秒,他闷声应了句“好”,然后补了一句:“师父,谢谢。”

“挂了吧。”

周航把电话放下,合上笔记本。屏幕暗下去的一瞬间,他看到自己映在黑色屏幕上的脸,眉头拧着。客厅里很安静,林薇不知道什么时候站在了卧室门口,披着外套看着他。

“方卓?”她问。

“嗯。漏单了,加上重复扣费,两个问题叠在一起。明州那边要索赔。”

林薇走过来,在他旁边坐下。她没有问他“那你去不去”,只是看着他。周航能感觉到她的目光,温柔但清醒。

“三个表锁了,数据暂时不会再错。明天我得去趟公司。”他说。

“去了然后呢?”

“然后把系统修好。”周航顿了一下,“修好之后,该办的手续办掉。”

林薇点点头。她伸手把周航手里的手机抽走,放在茶几上。“那今晚还能睡五个小时。走吧,剩下的明天再说。”

周航站起来,经过书桌时,把那张折好的草稿纸从外套内兜里拿出来,展开看了一眼。纸上画的数据表结构还清清楚楚,修复步骤写到了第三步。他把草稿纸重新折好,这次放进了明天要穿的外套口袋里。

躺下之后,周航盯着天花板。林薇的呼吸声渐渐平稳下来。他脑子里还在过方案,顺便算了一下时间:早上八点到公司,九点前可以完成锁表状态确认和数据快照,九点半之前能启动修复脚本。只要方卓白天没乱动东西,一切都来得及。

凌晨两点多,手机又亮了一下。周航拿起来看,是方卓发来的一条消息,就四个字:“锁好了。师父。”

周航没有回复。他看了眼屏幕上的时间,然后翻了个身,闭上眼睛。明天要面对的不只是系统故障,还有赵广年那张看见他出现时必然会堆起笑脸的脸。他得记住一件事——这次回去,是方卓把他拉回去的,是那份方案没能落地把他推回去的,唯独跟赵广年的年终奖和兄弟感情没有半点关系。

凌晨的窗外传来一声很远的车鸣,周航在半睡半醒之间,把明天要说的话在心里排了一遍。

第八章 回场条件

腊月廿九早上七点五十,周航把车停在星禾信息楼下。园区里挂着的红灯笼在风里晃,往年这时候他早该在老家炕上坐着了,今年却连后备箱里的年货都没卸。

他直接绕过行政楼,从侧门进了机房。方卓靠在机房门口的墙上,眼睛底下两团青黑,手里攥着一瓶没拧开的矿泉水。看见周航,他站直了,嘴唇动了动,最后只憋出一句:“师父,锁还在,数据快照做了两份。”

“日志导出来没有?”

“导了。从昨晚十一点到今早七点,所有异常扣费的订单号我都标了。”

周航点头,推门进去。机房冷气常年开到十八度,一排排机柜绿灯闪烁,风机的噪音里夹着服务器满负荷运转的嗡鸣。他走到主控台前,方卓已经把他自己那台笔记本架在旁边,屏幕上开着三个窗口——数据库连接、客户投诉记录、还有一份手写的故障时间线。

“你几点睡的?”

“没睡。”方卓声音发干,“锁表之后我跑了两次校验,发现重复扣费是从十二月二十号开始的,之前一直潜伏着,结算高峰一来才集中爆发。”

周航坐下来,手指落在键盘上。他先调出订单表的索引状态,又看了一眼方卓改过的那段配置——时间轴参数确实被打乱了,原本按自然日结算的批次被切成了六小时一结,叠加主键冲突,才导致同一笔订单被连续计费多次。

“你改配置之前为什么没看提交记录?”

方卓低下头:“那个参数赵总说是临时优化,让我先跑起来。我没多想。”

周航没再追问。他快速扫了一遍数据分布,确认锁表之后没有新增异常,然后打开了自己的私人存储——离线备份里躺着那份三个月前提交的紧急修复方案,原稿和编译好的修复包都在。他插上U盘,把修复包拷进生产环境目录,但没有立刻执行。

“等赵广年签字。”

方卓愣了一下:“签什么字?”

“授权修复。”周航站起来,把笔记本屏幕转向门口方向,“他不签,我不动生产库。昨晚锁表是抢时间,今天改库必须走流程。”

话音刚落,机房厚重的不锈钢门被推开了。赵广年裹着一件深灰色羊绒大衣走进来,皮鞋上沾着一点雪泥,脸上堆着笑,但眼神在周航和方卓之间来回扫了两遍,嘴角的弧度很快落了回去。

“小周,来了就好。”他把大衣扣子解开,搓了搓手,“昨晚的事我都知道了,老哥先给你赔个不是。年终奖那个事——”

“赵总。”周航打断他,声音不高但压得很实,“系统现在处于只读冻结状态,重复扣费涉及约一千七百笔订单,金额在四十八万左右。我手上有修复包,执行后能回滚错误计费并补全漏单数据。但在开动之前,有三件事需要你当场确认。”

赵广年脸上的笑容僵了一下,很快又浮起来:“你说,你说。”

“第一,这份紧急修复方案三个月前我提交过,你批了‘年后再说’。今天你必须签字确认按原方案执行,包括主键重构和索引重建。”

周航从口袋里掏出那张折好的草稿纸,展开,拍在机柜旁边的置物架上。纸面上的表格结构和参数写得密密麻麻,边角已经磨毛了。

赵广年的目光在纸面上停了停,嘴角抽动了一下:“签,这有什么不能签的。小周你写的东西我哪次没批?”

“第二,重复扣费的四十八万,今天中午前启动原路退回。所有客户,挨个退。不能等到节后,不能走分期,不能变成‘下次抵扣’。”

赵广年这回没立刻接话。他摸了一下下巴,声音放低了些:“小周,财务那边要放假了,退这么多笔——”

“孙姐今天在。我确认过,她昨天已经把对账清单拉出来了,退费通道只需要你一个授权码。”周航看着他,“这个也不需要商量。”

赵广年的脸色开始发沉。他看了一眼方卓,方卓把头扭向机柜那一侧,假装在看指示灯。

“第三。”周航把手插回外套口袋,语气平静得像在说别人的事,“系统修好之后,我的劳动关系正式结束。请假单、离职单,今天一起走完。”

机房里安静了几秒,只有风机在嗡嗡响。赵广年盯着周航,脸上的笑彻底没了,换成一种复杂的、半是恼怒半是算计的表情。

“小周,你这是要挟公司。”

“随你怎么理解。”周航拿起置物架上的草稿纸,重新折好,“三条,缺一条我就不碰生产库。你们可以继续用只读状态撑着,看客户是先投诉到工信部,还是先索赔。”

他转身往门口走。方卓在身后叫了一声“师父”,他没停。

走到走廊拐角时,身后传来急促的脚步声。赵广年追到走廊,羊绒大衣的衣摆差点绊在门框上,他一把扶住墙,喘了一口气。

“签!我签!”

周航停下来,没有回头。

赵广年从大衣内兜摸出一支笔,又朝方卓喊:“去我办公室拿紧急授权单!”方卓从机房探出头,看了周航一眼,然后飞快地往行政楼那边跑。

赵广年走到周航面前,压低声音,语气里带着一种失败的亲热:“小周,你说你这是何必。年终奖那个事我承认是财务搞错了,咱们兄弟——”

“赵总。”周航侧过脸看着他,“方卓给我打的电话,方案是我三个月前写的,系统是我建的。这三样里没有一样跟兄弟感情有关。”

走廊尽头的玻璃门透进早晨的光,照在两人中间的水磨石地面上,明晃晃的一道线。方卓举着授权单跑回来,喘着气把单子递给赵广年。赵广年接过来,在“紧急修复授权”一栏潦草地签了名,笔尖几乎把纸划破。

他把单子递给周航,嘴唇抿成一条线。

周航接过来看了一眼,折好放进口袋,然后转身走回机房,声音没有任何起伏:“方卓,开工单,标记故障编号XT-230127-01。准备执行修复包,你全程录像。”

方卓应了一声,飞快地坐到辅助工位上。赵广年站在机房门口,看着周航在键盘上敲下第一行命令,嘴唇动了几下,最终什么都没说,裹紧大衣走了。

周航没有抬头。他看着屏幕上跳动的执行日志,心里很清楚——今天从这里走出去之后,他不欠这家公司什么了。该写的写了,该干的干了,该忍的不忍了。

修复脚本开始跑第一批校验,方卓在旁边小声念着参数。周航泡了杯速溶咖啡,等着数据一轮一轮过。窗外传来零星鞭炮声,有人已经在提前庆祝了。

九点四十,第一笔退回成功的消息从财务序列弹出。周航扫了一眼,继续盯日志。方卓看了他一眼,犹豫半天,低声问:“师父,你离职之后,这套系统怎么办?”

“你看得懂文档就行。”周航喝了一口咖啡,“三个表锁的逻辑我给你写过注释。下次再出主键冲突,你按第四章的步骤跑。”

方卓“嗯”了一声,声音有点闷。周航没有安慰他,继续翻着日志,把每一处可能出错的节点都做了标记。今天之内,他要把故障窗口彻底冻结,把重复扣费逐笔核销,把该交代的都留在系统里。

毕竟,这是他最后一次用星禾的服务器了。

第九章 六小时止血

方卓把录像的手机架在显示器旁边,镜头对准主控台,然后翻开笔记本,握着笔等周航开口。这个习惯是周航带他第一年就养成的——凡涉及生产环境操作,必须记录原始步骤、执行人和时间戳。但方卓翻页的速度明显比以前快了,周航扫了一眼,看见前面几页潦草的字迹,那是昨晚他改配置时自己写的,没有一个字提到回滚方案。

周航没有评价,把紧急修复包的打印稿摊在操作台上,用咖啡杯压住一角。“第一步,数据表锁。你去把订单表、计费表、用户索引表三张的当前连接数拉出来,包括等待队列。”

方卓敲了几下键盘,报数:“订单表连接数247,等待队列83。计费表189,等待12。用户索引表没异常。”

“对得上。”周航看了一眼自己三个月前方案里标注的峰值阈值,“订单表等待队列超过50,说明主键冲突已经开始排队。直接锁表会让正常请求也堵死,所以先做增量冻结。”

他伸手在主控台输入了一行指令,把一个时间点之后的所有订单标记为“待核验”状态,写入只读临时表。屏幕上的数据流立刻变慢了,活跃连接数开始往下掉。方卓凑过来看那行指令,周航侧开身子让他看清楚每一个参数,然后说:“记下来,这个语法跟我给你的文档第四章第四节差了一个参数。我在注释里写漏了,你补上。”

方卓低头飞快地记,笔尖在纸上划出声响。

九点五十五分,计费模块的写入被完全冻结。周航扫了一眼监控面板,确认没有新的重复扣费产生,然后对方卓说:“第二步,统计已经污染的单据。用我放在桌面上的对账脚本,遍历从昨晚二十点四十分到刚才的全部计费记录,输出重复单号、原单号、金额、客户ID。”

方卓找到脚本文件,双击运行。脚本开始刷屏,一行行记录往外蹦。周航退后一步,靠着机柜站着,端着咖啡喝完最后一口。他看见方卓盯着屏幕的眼神从焦虑变成了茫然——屏幕上滚动的行数已经超过三万。

“师父,昨晚到现在重复扣了快九十万。”

“我知道。”周航把空纸杯捏扁扔进垃圾桶,“所以不能一笔一笔手动退。脚本跑完之后会生成一个归集表,按客户ID汇总。你去把财务序列的接口打开,准备调批量退款。”

方卓照做了。归集表用了八分钟跑完,一共一千七百三十三笔订单,集中在三百多个客户身上。周航看了一眼最大的一笔金额,是明州商贸的一个年度服务包,重复扣了两万六。他皱了皱眉,但没有说话,转头让方卓调出客户侧短信通知模板。

“短信内容改一下。”周航说,“原来的模板是‘您的订单已受理’,现在改成‘您有一笔重复扣费将在两小时内原路退回,如有疑问请回复本号码’。措辞要稳,不要道歉过度,也不要把责任往系统上推。客户要的是钱回来,不是听我们解释技术问题。”

方卓调出模板文件,按周航说的改了。周航凑过去看了一眼,又加了一句:“末尾加上‘星禾计费通’的签名。别加客服电话,现在打进来全是骂的,接线员处理不了。”

十点二十分,第一批退款指令发往财务序列。周航盯着返回码,第一笔成功,第二笔成功,第三笔返回“银行卡状态异常”。他记下那个客户ID,对方卓说:“这笔单独处理,标记成人工跟进。不要让整批失败。”

方卓一边操作一边问:“师父,要是退错了怎么办?多退给客户了。”

“不会退错。”周航指着归集表里的“原单号”列,“每一笔重复单都有唯一对应的原单,脚本比对过金额和时间戳完全一致才纳入退款。不一致的会落到人工列表里,现在人工列表是空的。”

方卓愣了两秒,嘟囔了一句:“那脚本你什么时候写的?”

“上个月,发现主键冲突隐患那天晚上。”周航说得平平淡淡,“写到凌晨三点,早上八点交了方案。赵总批了‘年后再说’。”

方卓没再接话,低头继续盯着退款进度条。十点五十,一千七百三十三笔退款全部处理完毕,只有七笔落到人工列表,原因各不相同。周航把那七笔的处置方法口述给方卓,方卓一字不落记下来,把笔记推到周航面前让他核对。

周航看了一眼,改了两处措辞,然后把笔还给他。

十一点二十分,周航让方卓执行回滚。昨晚方卓改的那版配置被替换回原始文件,周航在替换前做了一次快照备份,把错误配置和修改时间单独存档。方卓问为什么要留着错误配置,周航说:“将来审计要用。谁改的,什么时候改的,改之前提交过什么方案,这三样证据链不能断。你留着,以后有人问起来,你拿这个说话。”

方卓默默把快照文件拷到两个不同的存储位置。

十一点四十,周航打开一个新的终端,开始写补单程序。故障窗口里被冻结的订单有一批是正常的,只是因为计费模块停写而积压了。补单程序要从待核验临时表里把正常单捞出来,按原始时间戳重新入账,同时跳过那1733笔重复单。方卓搬了把椅子坐在旁边看,周航每写一行就解释一句,用的是平时带他做项目时的语气,没有因为要走了就省略步骤。

“你以后自己写补单程序,要注意时间戳的时区。”周航说,“我们用的是东八区,但数据库底层存的是UTC。你如果不做转换,补进去的单会差八个小时,客户看到的账单就是错的。”

方卓点头,忽然问了一句:“师父,你为什么不直接写个更简单的方案?反正你要走了。”

周航停了一秒,手指还在键盘上。他侧过头看了方卓一眼:“系统是我建的,我写的每一行代码都要对得起用它的人。你以后也一样——活干得好不好,跟你在哪家公司没关系,跟你自己有关系。”

方卓没吭声,低头在笔记本上写了一行字。周航没看他写了什么,继续把补单程序敲完。

十二点整,补单程序执行完毕。积压的四百多笔正常订单全部入账,计费模块的写入权限重新开放。数据流恢复正常的瞬间,监控面板上的曲线明显平稳了。

周航把故障编号XT-230127-01的全部操作日志导出,分成三份:一份存档在机房服务器,一份拷给方卓,一份自己留着。他在日志末尾加了一段备注,写明了故障原因、影响范围、处理过程和遗留问题,交给方卓打印出来,准备放进交接文档。

方卓敲完打印键,盯着那几页纸看了很久。周航站起来活动了一下脖子,走到窗边。走廊尽头的玻璃门还透进早晨的光,但现在已经过了正午,光移到了墙根,只剩窄窄的一条。

方卓忽然开口:“师父,昨晚我在家改配置的时候,觉得只要把参数调回去就行了,特别简单。”

“嗯。”

“我没想到……会有主键冲突排队。”

周航转过身看着他。方卓的电脑屏幕上还停在监控面板,曲线已经归零,平稳得像一条直线。

“你不是被系统打败的。”周航说,“你是被‘省事’打败的。下次遇到同样的情况,先看数据表连接数,再动配置。方案文档我留了三个月的思考在里面,你读完再改任何东西。”

方卓用力点了一下头。

周航拿起自己的运维日志本,翻到最新一页,写了四个字:窗口冻结。然后合上本子,放进背包里。他看了一眼机房墙上的挂钟,六小时整,比方案预估的最快时间还早了四十分钟。

方卓把打印好的故障报告递过来,周航接过去翻了翻,签了名。他把报告放在操作台上,拍了拍方卓的肩膀。

“我去趟人事部。”周航说,“你把录像存好。”

方卓站起来,忽然说:“师父,你那本运维日志……能不能借我看看?”

周航停下脚步,回头看了他一眼。那本日志跟了他十年,上面密密麻麻记录着每一次故障、每一次排查、每一次深夜里的修改。他没有答应,也没有拒绝,只说了一句话:“你先把我给你的文档读完,读完了再跟我说。”

说完他推开机房的门,走了出去。走廊里很安静,只有服务器风扇的低鸣从门缝里漏出来。方卓站在机房里,低头看着自己刚才记的那几页笔记,然后坐下来,重新翻开了紧急修复方案的第一页。

第十章 签字离职

人事部在走廊另一头,门半掩着。周航敲了两下门框,里面传来孙姐的声音:“进来。”

孙姐正坐在工位上整理一摞表格,见他进来,手里的动作停了。她抬头看了一眼门口,确认没人跟着,才压低声音说:“签字的文件我都给你备好了,离职申请单、交接确认表、结算单,三份。”

周航走过去,把背包放在旁边的椅子上。孙姐把文件推到他面前,笔也递了过来。他没急着签,先一张一张翻看。离职申请单上写着“因个人原因申请离职”,他拿起笔,在空白处补了一行:已提交紧急修复方案并完成本次故障处置。

孙姐看见了,没说话,只是从抽屉里又拿出夹子,帮他把故障报告和交接文档一起夹进去。

“财务那边……”孙姐犹豫了一下,“赵总上午让人查了你工资卡的收款记录,我估摸着他要找你谈。”

周航点了一下头,继续签字。孙姐靠在椅背上,叹了口气:“小周,你那个五十块的事,我其实心里也过不去。全公司发年终奖那天我就想跟你说,但那时候赵总在群里盯着,谁也不敢吭声。”

“我知道。”周航把结算单翻到最后一页,“孙姐,这事跟你没关系。发钱的是公司,定数的是赵广年。”

孙姐压低嗓音:“我听说他今天要拿钱补给你,让你留下来把系统的事收尾。”

周航停住笔,抬头看她。孙姐摆了摆手:“你别看我,我传个话。你心里有数就行。”

话音刚落,走廊里就响起了脚步声。皮鞋踩在地砖上,节奏不急不缓,但每一步都像提前量好了重量。孙姐迅速把脸埋回表格里,假装忙碌。

赵广年推门进来,穿着一件深灰色羊绒大衣,手里拎着个牛皮纸信封。他进门先笑,笑得很周到,先冲孙姐点了个头,又转向周航:“忙着呢?正好,我找你有点事。”

周航把笔帽盖上,没站起来。

赵广年拉了把椅子,在周航对面坐下。他把牛皮纸信封放在桌上,手指压着信封边缘,语气像是拉家常:“昨晚上那个故障,方卓跟我说了,你出手了,六小时就稳住了。我就说嘛,周航是我们星禾的定海神针,关键时候从来没掉过链子。”

周航没接话。赵广年也不尴尬,把信封往他面前推了推:“这是五千块,公司的一点心意。年终奖那个事,财务那边操作有误,我已经批评他们了。五十块,确实不像话,拿出去都丢人。”

他说“丢人”两个字的时候,眼睛看着孙姐的方向。孙姐装作没听见,翻表格的手顿了一下。

周航看着那个信封,没有动。

“赵总,”他开口,声音不高,“您是打算用这五千块,买我留下来继续干?”

赵广年摆手:“什么买不买的,兄弟之间说这个难听。你看看你手头那套修复方案,方卓说他看不全明白,系统刚稳住,后面肯定还有硬仗要打。你走了,这个摊子谁接?”

“方卓能接,只要有人批他的方案。”

“他太嫩。”赵广年身子往后一靠,两只手搭在扶手上,“我实话跟你说,昨晚那一出,客户那边炸了锅,赔偿的事我压着呢。你要是在,我心里踏实。”

周航把离职文件叠好,收进包里。赵广年看见他这个动作,脸上的笑僵了一瞬,随即又松开了:“嫌少?行,咱们可以再谈。你开个价。”

“赵总,我不是来谈价的。”周航把背包拉链拉上,站起身,“文件我签完了交人事,年前的手续今天走完。故障的交接文档留给方卓了,里面有修复包和操作步骤,你们照着走,短期不会出大问题。”

赵广年也站起来,脸上的笑彻底收了。他把信封拿在手里掂了掂,语气变了:“周航,你这就没意思了。五十块年终奖是我定的?是你运气不好,抽到了最小的那个。别人都拿了你闹什么?”

“别人拿多少我不管。”周航看着他,“我入行十年,在这家公司干了六年。核心数据库是我搭的,客户计费系统是我一行一行调通的。我提交的紧急修复方案,您批了句‘年后再说’。昨天出的事,就是我警告过的那个隐患。”

赵广年脸色沉下来:“你在指责我?”

“我在陈述事实。”周航把背包甩到肩上,“今天我把系统修好了,是因为它不该垮,跟您给多少钱没关系。但有一件事,您得给我一个答复。”

赵广年皱眉:“什么事?”

周航从包里抽出一张纸,是紧急修复方案的摘要页,三个月前提交时打印的,上面有赵广年的手批:“年后再说,别制造紧张。”他把纸放在桌上,推到赵广年面前。

“这次故障的处置结论,写进公司运维制度。紧急修复方案提交后,二十四小时内必须响应,超过时限搁置的,出事故由审批人负责。您签个字,我走也走得安心。”

赵广年盯着那张纸,手指摩挲着下巴。他沉默了几秒钟,然后把纸推了回去。

“这种东西不能写进制度。”他说,声音恢复了那种刻意的温和,“制度是给外人看的,你是我兄弟,我不跟你讲虚的。你留下来,年后我专门成立一个技术保障组,你来做组长,待遇另议。”

周航看着他,没有立刻回答。办公室里安静得能听见走廊另一头打印机的嗡鸣。孙姐低着头,手里的笔半天没落下去。

“赵总,我明白您的意思。”周航把纸收回包里,声音很平,“我要的不是组长位子,也不是补给我五千块。我要的是——我提的方案被当回事,我说的话有分量。您今天不签这个字,等于说明年还会一样。”

赵广年的脸色彻底冷了。他站起来,把信封拍在桌上:“周航,你把话说清楚。”

“很清楚。”周航拉开办公室的门,回头看了他一眼,“制度您不签,那我不修了。系统后面再出问题,后果您自己背。”

他走出人事部,走廊里的冷气扑在脸上。身后传来赵广年压着怒气的喊声,被孙姐的劝解模糊了。周航没回头,把背包带子紧了紧,往电梯方向走去。

电梯门打开的时候,方卓从里面冲出来,差点撞上他。方卓手里捏着一张打印纸,脸色发白:“师父,客户群里有人在发截图,说重复扣费的事上了本地的消费投诉榜,明州商贸那边打电话来问怎么回事。”

周航接过纸看了一眼。截图上是星禾计费通的Logo,配着一行投诉标题。时间戳是半小时前,故障刚修复不久。

“方卓,”周航把纸还给他,“你按文档把客户侧的通知短信模板发出去,说明情况,承诺退款,别拖。”

“可是赵总说先压着,等赔偿方案定了再——”

“压不住。”周航打断他,“客户比你想象中知道得多。你现在发,是主动说明;等他们找上门再发,就是被动认错。去办吧。”

方卓攥着纸,嘴唇动了动,最终什么也没说,转身跑回了机房方向。

周航走进电梯,按了一楼。门关上的瞬间,他听见走廊里赵广年的声音远远传来,带着那种急于找补的焦躁。他把背包里那张写了“窗口冻结”的运维日志本又摸了摸,指尖碰到封皮磨毛的边角,心里忽然很静。

电梯往下走,数字一格一格跳。周航掏出手机,给林薇发了一条消息:“签完了,打算回老家,能赶上除夕。”

林薇几乎是秒回:“好,我收拾东西,你路上慢点。”

他把手机收进口袋,电梯到了一楼。门打开,大厅里空荡荡的,前台挂的灯笼还亮着,红得有些扎眼。周航走出旋转门,腊月的风灌进衣领,他缩了一下脖子,从包里摸出那张赵广年没签的方案摘要,折好,放进内衣口袋,贴着胸口。

身后的大楼安静地矗立在灰白色的天空下。周航没有回头,迈步往地铁站走去。地上的影子被风拉得很长,跟着他,一步一步,走得很稳。

第十一章 除夕前的急召

除夕那天早上,周航是被老家院子里的鞭炮声吵醒的。

他躺在小时候睡过的木床上,窗外的天刚蒙蒙亮,灶房里传来母亲和林薇说话的动静,锅铲碰铁锅的声音很清脆。周航翻了个身,摸过手机看了一眼,七点刚过。屏幕上没有未接来电,只有方卓凌晨三点发来的一条消息:“师父,客户侧短信都发了,退款流程也走完了第一批,赵总说等年后统一处理剩下的。”

周航回了两个字:“收到。”

他把手机扔在枕边,盯着天花板看了一会儿。房梁上还留着小时候贴的报纸,泛黄卷边,日期是二十年前的。他忽然觉得有点好笑——在城里拼了十年,最后能睡个踏实觉的地方,还是这张一米五的旧木床。

早饭是母亲做的红薯稀饭和炸年货。林薇坐在周航旁边,给他夹了一块糍粑,低声问:“今天真能清静?”

“应该能。”周航咬了口糍粑,“系统昨天下午稳住了,方卓守着,出不了大岔子。”

林薇看了他一眼,没再说话。她了解周航的脾气,嘴上说“应该能”,心里其实也没底——这种事,从来不由他说了算。

果然,上午十点刚过,手机响了。

周航看了一眼来电显示:赵广年。他把手机翻了个面,扣在桌上,继续帮母亲贴春联。

隔了不到五分钟,电话又响了。这次是方卓。

周航犹豫了一下,走到院子里接起来。

“师父,”方卓的声音发虚,像是一夜没睡,“出事了。”

“说。”

“明州商贸那边,客户侧系统有几笔订单漏单了。不多,十七笔,但金额加起来六万多。他们的技术说是在我们系统里查不到这几笔的回执,怀疑是接口回调丢了。”

周航眉头微皱:“你查了回调日志没有?”

“查了,日志里没有这几笔的记录。我把昨天修复之后的配置又核对了一遍,跟我们之前的方案不冲突,但就是找不出原因。赵总让我马上处理,可我——我判断不了,师父,这情况我没见过。”

周航沉默了几秒。他听见电话那头有机房风扇的声音,还有方卓敲键盘的动静,急促、混乱。

“方卓,你现在把回调日志的时间戳拉出来,跟客户订单号交叉比对。如果日志里确实没有,就往上游查,看是不是队列积压导致的消费延迟。这种零星漏单,大概率不是配置问题。”

“好、好,我试试——”

电话那头忽然换了人。赵广年的声音插进来,带着一股压不住的火气:“周航,你现在能不能远程看一下?就看一下,方卓搞不定。”

周航站在院子里,头顶是老家瓦蓝的天,隔壁邻居家传来剁饺子馅的声响。他握着手机,语气平静:“赵总,我在老家陪家人过年。”

“我知道,我知道,”赵广年语速很快,像是怕他挂电话,“就这一次,特殊情况。明州商贸是我们最大的客户,他们的年度框架合同刚续签,这个节骨眼上不能丢。你远程看一眼,我给方卓权限,你指挥他操作就行。”

“方卓有操作手册。”

“手册上没这个情况!”赵广年的声音拔高了半度,随即又压下来,换成那种惯用的推心置腹的语气,“周航,兄弟,咱们这么多年了,我知道年终奖的事你心里有气,年后咱们坐下来好好谈,行不行?现在是关键时刻——”

“赵总,”周航打断他,“您说的关键时刻,我三个月前就提醒过。订单表主键冲突的风险,紧急修复方案我也交到您桌上了——”

“那个方案年后一定批——”

“年后,”周航重复了这两个字,语气里没什么情绪,“您上次也是这么说的。方案不批,人您也不认,出了事就打电话让我上。赵总,我干不了这活。我在老家陪家人,您找别人吧。”

电话那头安静了两三秒。

赵广年显然没料到这个回答。他大概是习惯了周航以前的“好说话”——有事随叫随到,有锅默默背,技术上的事从来不含糊。可今天这个“好说话”的人,在除夕上午,用最平淡的语气把他堵了回去。

“周航,你——”赵广年的声音里带上了一丝真实的怒意,“你这是拿公司命运开玩笑。明州商贸的单子黄了,整个技术部年终奖都受影响,你担得起吗?”

“您的年终奖,不是我的年终奖。”周航说,“我那份五十块,已经到账了。”

这句话说出来的时候,他自己都觉得有些讽刺——原来五十块这个数,也可以用在这种场合。

电话那头沉默了更长的时间。周航听见赵广年的呼吸声粗重,像是在极力找词。

“好,好。”赵广年最后挤出两个字,语气沉下来,“周航,你想清楚,今天你挂了这个电话,年后你回来,有些事就不一样了。”

“赵总,”周航握着手机的手很稳,“我昨天签完离职单,就已经不一样了。”

他没等对方回应,按下了挂断键。

院子里安静下来。远处有人在放烟花,声音闷闷的,像从另一个世界传来。周航低头看了一眼手机屏幕,通话时长两分四十一秒。

他正要转身进屋,手机又震了一下。方卓的短信:“师父,赵总说让我自己想办法。我按你刚说的思路查了队列,是积压导致的消费延迟,已经重新消费补单了。客户那边确认收到,没漏。”

周航看着这条消息,心里略微松了口气,又有些说不上来的复杂。方卓能自己查出来,说明技术底子是有的——只是以前习惯了先找他,先推责,先等指示。这一回没人可推了,反而逼出了他自己。

他回了三个字:“做得好。”

正要收起手机,赵广年的电话又打进来了。周航盯着屏幕上的名字,没有接。电话响完一轮,停了。过了半分钟,又响。他调了静音,把手机放进兜里。

灶房里林薇探出头来喊他:“周航,进来包饺子了,妈一个人忙不过来。”

“来了。”

他拍了拍手上的灰,往屋里走。经过堂屋的时候,看见墙上挂的全家福——还是去年春节拍的,他和林薇站在父母身后,笑得有些拘谨。照片旁边贴着他小时候得的奖状,纸已经发脆了,父亲用透明胶带从背面粘过好几道。

手机在口袋里又震了两下,他没看。

包饺子的时候,林薇低声问他:“赵广年的电话?”

“嗯。”

“你拒了?”

“拒了。”

林薇把一张饺子皮摊在手心,没抬头:“他怎么说?”

“说年后不一样。”

林薇嗤了一声,往饺子皮上放馅,动作利落:“他那个‘不一样’,就是把你当驴使。以前是累了给口草,现在连草都省了。”

周航的母亲在旁边擀皮,没听清小两口说什么,只是笑着说:“航啊,今年在家多待几天,别急着回去上班,你爸念叨你好几回了。”

“知道了,妈。”周航应了一声,低头包饺子。

他包得很慢,把馅放在皮中间,对折,捏出一个月牙形的花边。这种包法是父亲教他的,说是当年在生产队里练出来的手艺。周航小时候觉得父亲包得好看,自己怎么学都歪歪扭扭,后来练了十几年,终于包得像样了。可父亲现在手抖了,包不动了。

手机在口袋里又安静地震动了一下。周航没去管。

窗外传来邻居家的鞭炮声,密集、热闹,震得玻璃轻轻响。周航看着手里包好的第十七个饺子,忽然想起昨天赵广年没签的那份方案摘要,还贴在内衣口袋里。他昨晚换了衣服,把那张折好的纸放在了老家的书桌抽屉里,压在小时候的日记本下面。

他不知道那张纸还会不会有用。

但此刻,饺子下锅的滋滋声、母亲和林薇说话的笑声、院子里偶尔响起的鞭炮声,把那个叫“星禾信息”的世界隔得很远。周航把最后一个饺子摆上盖帘,拍了拍手上的面粉,去灶前添柴。

火烧得很旺,映在他脸上,暖融融的。

第十二章 年夜饭上的电话

年夜饭摆了满满一桌。父亲把珍藏的那瓶白酒打开了,给周航倒了一小盅,自己也倒了半盅,母亲和林薇喝的是热过的米酒。

“来,一年到头,都辛苦了。”父亲端起酒盅,手微微颤了一下,酒洒出来两滴在桌布上。他有些不好意思地笑笑,“手不听使唤了。”

周航赶紧端起自己的盅跟父亲碰了一下:“爸,您少喝点。”

“高兴嘛。”父亲抿了一口,放下酒盅,目光在周航脸上转了一圈,“航啊,你今年是不是有心事?从回来就不怎么说话。”

周航夹了一筷子鱼,含糊道:“没有,就是年底事多,累。”

母亲接话道:“累就歇歇。你那个公司,年年都忙,年前忙到年后,也没见给你多发几个钱。”

这话说得随意,桌上却静了一瞬。林薇看了周航一眼,没吭声,低头扒饭。周航嚼着鱼,觉得刺有点多,小心地往外剔。

“妈,吃饭。”他说。

母亲没察觉,还在念叨:“你看隔壁小勇,在县城开个装潢店,去年过年给他妈包了两万。你读了大学,又在大公司,一年到头给家里寄的钱……”

“行了。”父亲打断她,“孩子有孩子的难处,你懂什么。”

母亲撇撇嘴,不再说了。周航埋头吃了两口饭,心里堵得慌。他给家里寄的钱确实不多,每个月固定打两千,过年另外给五千。跟小勇比不了,但他一直觉得够用就行。可今天母亲随口一提,他心里那根刺被拨了一下。

刚要开口说点什么岔过去,手机在兜里震了。

他掏出来看,屏幕上是一串熟悉的号码,曹立民。跟下午赵广年的电话不同,这个号码他犹豫了一下,还是接了。

“周航,吃年夜饭呢吧?”曹立民的声音透着股爽利,“我就说一句,不耽误你过年——正式录用意向我刚发你邮箱了,核心系统负责人,带五个人,月薪三万,年终按团队业绩分红。合同细节你慢慢看,节后给我回话就行。”

周航愣了一下,话到嘴边拐了个弯:“曹哥,大过年的你还在忙这个?”

“我这是抢人,能不急吗?”曹立民笑了一声,“你考虑考虑,我不催。不过你那前东家的事,圈里都传开了,你心里有数就行。吃饭吧,挂了。”

电话来得快去得也快。周航把手机放下,发现一桌子人都在看他。

“谁啊?”林薇问。

“曹立民,以前的同事,现在在山海科技。”周航夹了口菜,想了想,还是说了,“他想让我过去,发了录用意向。”

父亲问:“什么条件?”

“月薪三万,带团队。”

桌上又静了。父亲把酒盅放下,认真看了周航一眼:“比你现在的工资?”

“高不少。”

母亲的眼睛亮了:“那敢情好,你答应了吗?”

周航摇头:“还没,我说考虑考虑。”

林薇在旁边没说话,只是拿起公勺给周航碗里添了勺汤。她的动作很轻,碗底碰着桌面几乎没有声音。周航知道她在想什么,她这个人从不在饭桌上说事。

吃完年夜饭,父亲和母亲在堂屋看春晚,林薇端着一盆热水到院子里洗碗。周航跟出去,接过她手里的碗布:“我来。”

两个人站在院子里,头顶是满天星星,远处断断续续有烟花窜上天空,划出一道亮线又散了。院墙外面传来邻居家电视机里春晚小品的笑声,隔了一层墙,听着有些失真。

林薇把碗一个一个递给他,低声问:“你真要跳?”

“还没定。”周航擦着碗,水有点凉,“但星禾那边,我是不想回去了。”

“因为那五十块钱?”

周航停下手里的动作,想了想:“不全是。钱少是一回事,我认了。可明天初七要签字,赵广年下午给我打电话,从头到尾没问过我方案的事。他不知道那个方案是什么,也不想知道。他只知道系统要崩了,得找个会修的回来。修好了呢?我是什么?我还是那个拿五十块钱的运维组长。”

他把碗放到旁边的石台上,声音压得很低,像怕被屋里的父母听见:“林薇,我在那个公司干了六年。系统是我从一行代码开始搭的,数据库表是我一张一张建的,运维手册是我一个字一个字写的。可到今天为止,他们没把我当资产。我就是一台耗材,用坏了换一台,能修就修,不能修就扔。五十块钱年终奖不是侮辱,是明码标价。”

林薇靠在门框上,看着他,过了一会儿说:“那你决定去山海?”

“曹立民这个人我了解。以前一起共事四年,他对技术什么态度,我清楚。”周航抬头看了看天,一颗很亮的星星挂在树梢上面,“他给的不只是钱。他说让我带团队,核心系统负责人——这个位置意味着我说话有人听。”

林薇沉默了一会儿,忽然问:“那星禾那边要是再打电话让你回去呢?”

“赵广年今天打了四个。”周航从兜里掏出手机,翻开通话记录给她看,“我没接。后来方卓也打了一个,我接了。他说系统还在漏,不过是零星的了,操作手册管用。他还说赵广年整个下午都在办公室摔东西。”

“你心疼了?”

“谈不上心疼。”周航把手机揣回去,“我留了操作手册、修复方案,还有全部日志。该做的我做了,对得起那六年。但人要往前走。”

林薇从他手里拿过最后一个碗,用干布擦了擦,轻声道:“我不是拦你。我就是怕你钻牛角尖,为了赌一口气跳过去,回头发现那边也不合适。”

“不是赌气。”周航把盆里的水倒进院边的菜地里,“我在星禾干得最累的时候,是客户催单、系统报警、方卓搞不定问题,我一个人扛到凌晨三点。那时候我觉得累,但心里踏实,因为我干的是技术活。可后来赵广年跟我说什么?他说‘兄弟,技术我不懂,我就信你’。这话好听,可他从来没想过技术值多少钱。他只信我这个人,不信这个行业。”

他弯下腰把盆扣在墙角,直起身来,呼出一口白气:“我今天说白了,不是钱的事。是他们从来不觉得技术是资产,只当耗材。这个结,多少钱都解不开。”

林薇没再问。她拍了拍手上的水珠,从兜里掏出手机。周航知道她的习惯,她用手机银行查了一下家里的存款,然后打开计算器按了几下。

“三万一个月,一年就是三十六万。”她说着,声音里没什么情绪,但手指在屏幕上划了一下,“房贷还有八十七万没还,车贷明年三月清。你要去山海,头一年咱们能松一大口气。”

“我知道。”

“不光是钱的事。”林薇把手机收起来,抬头看他,“你今天跟赵广年说‘干不了这活’的时候,我虽然没听见,但我想象得出来你那个表情。你这个人,很少说不。一旦说了,就是真的过不去了。”

周航站在院子里,听着屋里春晚传来的歌声飘出来,是首老歌,唱得人心里发软。他想说点什么,但觉得喉咙有点紧。最后只是伸手把林薇揽过来,拍了拍她的肩膀。

“初七去签字,然后去山海报到。”他说,“我决定了。”

林薇嗯了一声,把脸贴在他肩头,停了几秒,然后直起身:“行,进去吧,外面冷。爸该找你了,他那盅酒还没喝完,没人陪着他不肯收。”

两个人往屋里走。堂屋的门帘子被掀开,父亲探出头来:“你俩在外面嘀咕什么呢,快进来,小品要完了。”

周航应了一声,脚迈进门槛的时候,手机又震了一下。他掏出来看,是曹立民发来的一条消息:“考虑得怎么样?节后初七报到方便吗?”

他站在门口,手指在屏幕上停了一瞬,打了两个字发出去。

“方便。”

发完他把手机放回兜里,走到父亲身边坐下。父亲把剩下的半盅酒推过来:“来,陪爸再喝一口。”

周航接过酒盅,跟父亲碰了一下。瓷盅碰在一起,声音清脆。电视里小品正演到热闹处,母亲笑得前仰后合,林薇也坐下来剥橘子。周航抿了一口酒,辛辣的热流从嗓子下去,整个人都暖了。

窗外又炸开一簇烟花,把堂屋照得忽明忽暗。他看了一眼墙上那张全家福,心想,明年该换一张新的了。

第十三章 方卓也走了

正月初三一早,周航是被手机震醒的。

他摸过床头柜看了一眼,方卓发来的微信,问他在不在家,说想过来拜个年。周航回了个“在”,翻身坐起来。林薇还在睡,他轻手轻脚穿好衣服出了卧室。母亲已经在厨房忙活早饭,见他出来,让他去把阳台的腊肉翻个面。

窗外院子里落了一层薄雪,是夜里下的,还没化干净。周航翻了腊肉,洗了把脸,把客厅的茶几收拾了一下。父亲出门遛弯去了,家里清静。

十点刚过,门铃响了。

方卓站在门口,手里提着一箱牛奶和一兜水果,脸冻得发红,鼻尖也是红的。他穿了一件灰色羽绒服,拉链拉到脖子根,整个人缩着脖子。

“师父,过年好。”方卓把东西往门里递。

周航接过来,侧身让他进门:“进来,外面冷。”

林薇已经醒了,从卧室出来打了声招呼,就去厨房倒茶。方卓坐在沙发上,规规矩矩的,两只手搁在膝盖上,不像平时在公司那副吊儿郎当的样子。周航在他对面坐下来,打量着这个徒弟。

方卓黑眼圈很重,嘴唇也有点干裂,一看就是好几天没睡好。

“系统那边怎么样?”周航问。

“你那天修完以后没再出大问题,”方卓接过林薇递来的茶杯,说了声谢谢,“零星几个客户在闹,都是之前重复扣费的钱退回去了他们还追着要赔偿。赵总让我盯着客户群,发了个公告,然后让销售一个个去打电话安抚。”

“日志报警呢?”

“外包那个老孙在盯,但他不太看得懂咱们那套阈值设置,上次有个内存告警他半夜打给我,我看了半天就是个正常的GC波动。”方卓说到这里顿了顿,“我一个人顶不住了,师父。”

周航没接话。他端起茶杯抿了一口,等着方卓往下说。

方卓低头看着杯子,手指在杯壁上摩挲了两下,抬起头来:“我今天来,除了拜年,还有件事跟你说。我昨天跟赵总提了离职。”

这倒不意外。周航心里其实隐约有那么点预感,方卓那个电话打过来的时候语气就不太对。但他没打断,只是点了点头。

“我说不清具体为什么,就是觉得自己干不下去了。”方卓声音有点闷,“你那天在机房,从数据表锁一路排到补单程序,六个小时把窟窿堵上,然后跟赵总谈条件那会儿,我在旁边看着。我跟着你干了三年,那天是头一回觉得,技术这个东西,原来是这么有尊严的。”

他停了一下,像是在组织语言:“以前你总跟我说,把活干好就行,别管领导怎么想。我一直不太明白。那天我看你跟赵总一条条列条件,他签完字你才动手,我才明白你那个‘把活干好’是有前提的。前提是别人得认。人家不认,你干得再好也没用。”

周航听着,没插嘴。林薇从厨房端了盘切好的橙子放到茶几上,无声地退回了卧室。

“赵总怎么说的?”周航问。

“没怎么说。就问我是不是想好了,我说想好了。他说年后再谈。”方卓苦笑了一下,“过年这几个晚上我都在想,年后谈也没啥好谈的。外包盯着日志,我盯着客户群,真出点事还是我一个人扛,跟你在的时候一样。但你走了,那套系统里有些逻辑只有你懂,我查到哪一步算哪一步,心里没底。”

周航起身去了书房,出来的时候手里多了个牛皮纸文件袋。他坐回沙发上,把文件袋搁在茶几上推过去。

“这是那本运维日志的复印件,我除夕那天整理出来的。”周航说,“主表设计逻辑、触发器关联、对账脚本里所有手工干预过的节点,还有那套紧急修复包的执行步骤,都写在里面了。原件我带走了,这份给你。”

方卓接过文件袋,抽出来翻了翻。打印纸上密密麻麻,周航的笔迹工工整整,每一段修复流程后面都用红笔标注了风险点和注意事项。翻到某一页的时候他停下了,那一页夹了一张便签,上面只写了一句话,是周航的字迹,钢笔写的。

“技术得留着,别留着委屈。”

方卓盯着那张便签看了很久,然后把纸塞回文件袋,抬起头来。他眼睛有点湿,但没掉眼泪。

“师父,你到那边定下来以后,我要是想过去,你帮我递个简历行吗?”

周航看了他几秒,说:“你把日志看透了再说。山海那边不缺人,缺的是能把事从头到尾捋清楚的人。你要是只是不想在星禾待了,去哪儿都一样。”

这话说得直白,方卓愣了一下,然后点了点头,把文件袋收好放在身边。

“赵总那边交接怎么办?”周航问。

“我干到初十,把手上客户的事捋一捋,整理个文档。”方卓说,“外包老孙后面会直接对接赵总,其实也没什么好交接的。系统里该写的都写了,你自己那本日志里都有。剩下的就是谁来看的问题。”

周航没再说什么。他知道方卓跟赵广年提离职,这事不会善了。赵广年那套“兄弟感情”的招数,留不住周航,也留不住方卓。说到底公司就三个运维,一个走了,一个跟着走,剩下一个外包的连系统告警阈值都搞不明白。赵广年接下来要么花大价钱重新招人,要么自己看着办。

方卓坐了一会儿就走了。林薇从卧室出来收拾茶杯,看了一眼茶几上那个牛皮纸文件袋,问周航:“你把日志给他了?”

“复印的。”

“那你自己呢?”

“原件在我这儿。”周航走到书房门口,回头看了她一眼,“以后用不着了,留着做个纪念。”

林薇没再问。她把橙子皮收了,进厨房准备中午的饭。周航站在书房窗口,看着方卓走出小区大门,瘦小的身影缩在那件灰色羽绒服里,踩着路面的残雪一步一步往外走。

他掏出手机,翻到方卓的微信对话框,打了一行字:“到了跟我说一声。”

发完他把手机搁在书桌上,伸手翻开那本运维日志的原件。封皮已经磨得有些毛边了,里面是他从入职第一年开始记的,一直记到腊月廿八修完系统那天。最后一页写着整个故障处理的时间轴和处置结果,末尾是一行备注:订单表主键冲突隐患已闭环,长期方案待排期。

他合上本子,把它放进书架最上层那个铁盒子里,跟旧硬盘、旧工牌放在一起。窗外的雪又开始飘了,细细碎碎的,落在防盗窗的横栏上积了薄薄一层。

方卓那条离职的口子一开,星禾那个三人运维组就算彻底散了。周航心里清楚,赵广年接下来必然还会找他。系统漏洞暂时堵住了,可那套“星禾计费通”里他留下的手工对账逻辑、那些没有文档的暗桩、那些他靠经验绕开的坑,不是一份日志就能全交代清楚的。方卓肯学,但他还没到那个火候。

手机响了一声,是方卓回的消息:“到了,师父。”

后面跟了一句:“我看了日志第五页,那个主键冲突的脚本你写了三套备选方案,赵总当时为什么没让做?”

周航看着这行字,拇指悬在屏幕上方停了几秒。

他打了四个字发过去。

“嫌麻烦。”

然后他锁了屏,把手机扣在桌上,听着客厅里林薇切菜的声音和母亲烧水的响动。年还没过完,日子还得往前过。

第十四章 老客户的邀约

正月初五那天,周航原本打算带林薇和母亲去城郊的温泉民宿住一晚。母亲念叨了小半年,说同事老姐妹去过,水好,人少,适合过年。周航从腊月廿九修完系统回家后,整个人像从水底浮上来一样松了口气,对家里几乎是有求必应。林薇已经在网上订好了房间,行李也收拾得七七八八。

可上午九点多,一个陌生号码打进来,区号是本地的。周航犹豫了一下还是接了。

“周工吗?我是明州商贸的沈维。”对方声音不年轻了,带着江浙一带常见的平舌音,语速不快,字咬得很认真,“不好意思过年打扰你,我从孙姐那边拿的号码。”

明州商贸。星禾计费通体量最大的客户,年订单流水在星禾所有客户里排前三。沈维是他们的信息技术负责人,周航跟他对接快四年了,每次系统扩容、大促保障、对账异常排查,两人微信记录翻不到头。周航对他印象最深的是,这人从不说“你们公司”,只说“我们这套系统”。

“沈总,新年好。”周航走到阳台,把推拉门关上,客厅里林薇正跟母亲解释什么叫“温泉民宿到底是不是酒店”的争论声被隔在外面。

“新年好新年好。”沈维客气了两句,忽然语气沉下来,“周工,我直接说了。腊月廿七那晚系统重复扣费的事,你们公司后来给我们发了故障通报,说原因已定位、数据已修复。但通报里没写是谁处理的。”

周航没接话,等他往下说。

“我做了二十年技术管理,系统出故障见多了。但那次故障恢复之后,我们财务拉出来的对账明细,每一笔重复扣费都被逐笔标记、逐笔冲正,对账脚本写得清清楚楚。这不是一般人干的。”沈维顿了顿,“我打听过了,腊月廿八你就在办离职手续。”

“沈总,我确实已经离职了。”

“我知道。所以我打电话来,不是找你回去修系统,是有个项目想问问你。”沈维的语速快了一点,“明州这边年后要上新的业务中台,原来的计费结算模块跑不动了。项目不大,但节奏紧,甲方要求四月底前完成重构上线。我们内部评估过,这活最好就是你来牵头。”

周航靠着阳台栏杆,楼下小区里几个小孩在放摔炮,噼里啪啦的声响传上来。雪停了,天色灰白,楼顶的积雪化了一半,顺着排水管往下滴。

“沈总,实不相瞒,我节后入职山海科技,正月初七报到。”

电话那头安静了两秒。

“山海科技?”沈维重复了一下这个名字,声音里听不出失望还是别的什么,“曹立民那个山海?”

“对,曹立民。”

“那巧了。”沈维笑了一声,笑声很低很短,像早有预料,“山海在我们供应商短名单里。既然你去山海,那更省事——我们直接跟山海签合同。项目你牵头,我这边没意见。”

周航没想到他会这么干脆,愣了一拍。

沈维接着说:“周工,我不瞒你。我们内部评估这套系统重构的时候,列了三家候选。一家是你们星禾——现在叫前东家了,一家是山海,还有一家是杭城的。星禾的报价最低,但我们技术团队打分,星禾的实施方案分只有六十出头。原因很简单,他们那套计费通,核心模块全是靠你一个人撑着。你走了,星禾的方案等于只剩个壳子。”

周航听着,左手无意识地捏着阳台栏杆上结了薄冰的一角,冰碴子硌进掌心,凉意顺着指尖蹿上来。

“所以腊月廿八那晚,我看到系统恢复通报,第一反应是给孙姐打电话。孙姐跟我说你年终奖发了五十块。”沈维的语气忽然带了点说不清的味道,不像嘲讽,像在描述一个他见过太多次的事实,“周工,这圈子不大。你做了十年的东西值多少钱,市场上有人看得到。”

周航张了张嘴,一时不知道该说什么。他想起腊月廿七上午看到工资卡里那笔五十块的“众享红包”,想起自己当天下午请假时的平静,想起赵广年当晚那通电话。所有事情像一条线,从那个五十块钱的红色数字出发,穿过除夕前的机房、穿过方卓深夜的求助、穿过那本写满暗桩和备选方案的运维日志,一直通到这通电话里来。

“沈总,”他终于开口,“谢谢您看得起我。但我得跟山海那边确认一下——毕竟我还没签合同,项目上的事我不能替他们做主。”

“这个自然。”沈维说得很爽快,又补了一句,“你跟曹立民说,明州商贸的单子年前就在走流程了。他要是问起来,就说我沈维欠他一个人情,这项目技术负责人必须是你,别人来我不签。”

挂了电话,周航站在阳台上没动。樓下的摔炮声停了,几个小孩追着跑远了。空气里残留着火药燃烧后微涩的味道,混着冬天末尾那种潮湿的冷。

他把手机揣进口袋,推开推拉门。林薇正从厨房端出一盘切好的果盘,看见他进来,抬眼问:“谁啊?”

“明州商贸的技术负责人,沈维。你知道,我前头最大的那个客户。”

林薇把果盘搁在茶几上,母亲伸手拿了一块苹果。林薇看周航的脸色,问:“找你回去?”

“不是。他们有个系统重构项目,问我接不接。”

“你不是要去山海了吗?”

“所以他说直接跟山海签,项目我牵头。”

林薇擦了擦手,在沙发扶手上坐下来,盯着他看了几秒,脸上的表情慢慢舒展开。她没笑,但眉心那块平日因为房贷和开销总拧着的地方松了。

“周航,”她说,“我早就跟你说过,你这身本事,不是赵广年那五十块钱能打发的。”

母亲在旁边插话:“五十块钱是啥事?我怎么不知道?”

林薇冲周航使了个眼色,意思是回头再说。周航在对面的椅子上坐下来,拿起茶几上晾着的水喝了一口,心里那根绷了半个月的弦,悄没声地松了半圈。

他知道沈维这通电话的分量。明州商贸的计费结算系统,年流水过亿,重构项目的合同金额至少七位数。这笔业务从星禾的口袋转到山海,差额就是赵广年克扣技术价值的具体代价。沈维说得客气,什么“圈子不大”,其实就是一句话:星禾丢掉的不仅是一个运维组长,是他们最大客户的核心系统项目。

周航拿起手机,翻到曹立民的微信。两人加上好友后还没正经聊过几句,对话框里只有一条好友添加成功的系统提示。他打了三行字发过去。

“立民,明州商贸的沈维刚给我打电话,他们年后要重构计费结算模块。他的意思是这项目直接签山海,技术负责人得是我。你那边确认一下,能接的话我就推给公司接口人。”

消息发出去不到两分钟,曹立民的语音电话就打了过来。周航接起来,那头曹立民的声音带着笑:“沈维这个老狐狸,动作比我还快。我正月初八打算正式跟你说这个事呢,他倒好,直接堵你家门口了。”

“什么情况?”

“明州那个项目,年前就在走招标流程,春节前最后一周我才得到信。本来想着你初七报到,初八再谈。没想到沈维自己找你了。”曹立民语气里透着掩不住的痛快,“周航,这个项目能签下来,你今年的年终分红直接翻倍。我说真的。”

周航靠在椅背上,看着客厅里母亲一边吃苹果一边跟林薇讨论下午还去不去温泉。母亲坚持要去,说已经跟老家亲戚说了“儿子带我去泡温泉”,反悔了丢面子。林薇忍着笑翻手机查天气,说下午没雪,路上应该好走。

“行,”他对着话筒说,“那我初七报到,初八跟明州那边碰项目需求。”

“痛快。”曹立民顿了一下,忽然换了个语气,“对了,你前东家那边,你这两天听到什么动静没有?”

“没有。方卓初三那天来我家,给我看了他离职申请,赵广年压着没批。”

“压不了多久。”曹立民说得很笃定,“腊月廿七那晚的重复扣费,加上方卓改配置搞出来的第二轮,星禾在客户那边的口碑已经裂了。明州这个项目一丢,他们今年至少少一条大腿。赵广年接下来要么降价抢单,要么拿技术团队重新搭——但年前那三个运维剩一个外包的,他怎么搭?”

周航没接这个话。他不想背后论断赵广年,也没这个必要。电话那头曹立民大概也感觉到了,转了个话头:“行了,先不说这个。初七见,我把新机房的部署图发你,你先熟悉熟悉。”

挂了电话,周航站起身,走到书房门口。那个铁盒子还在书架最上层,里面装着日志原件、旧工牌和那块旧硬盘。他伸手把盒子拿下来,抽出日志本,翻开最后一页。那行“订单表主键冲突隐患已闭环,长期方案待排期”的备注下面,他拿起桌上的签字笔,在新一行写了几个字:新项目待启。

写完他把本子塞回盒子,盖子扣好。窗外的天光比早上亮了一些,薄云里透出点淡淡乌青色,是冬天下午特有的光,不暖,但干净。

客厅里林薇在喊他:“周航,你过来看一下这个房间选哪个,带私汤的还是带院子的?”

他把盒子放回书架,应了一声走过去。路过玄关时,手机又震了一下。他低头扫了一眼,是个陌生号码发来的短信,只有一行:周工,我是星禾人事的小沈,赵总让我问您初七有没有空回公司坐坐?

周航锁了屏,把手机装进口袋,走进客厅跟林薇一起看民宿的房型图。那条短信他没回,也没打算回。

第十五章 三万的月薪,五十的年终

正月初七早上八点半,周航把车停在山海科技园B座地下车库。车位是曹立民提前给他留的,靠电梯口,漆线新画过,白得发亮。

他拎着电脑包进电梯,按了八楼。电梯门合上时,手机屏幕亮了一下,林薇发来一张照片:家里玄关的鞋柜上摆着母亲早起包的饺子,摆成两排,旁边压了张字条——“给航航带饭”。周航嘴角动了动,把手机收好。

出电梯,曹立民已经在门口等着。他比四年前瘦了一圈,头发倒比在星禾时黑,大概是忙出来的精神气。两人握了手,曹立民没废话,直接领他往里走。

“合同人力那边已经备好了,你先看一眼,法务标了几处,你重点看竞业限制那块。星禾的合同我跟他们确认过,没有竞业条款,你签得干净。”曹立民推开一间玻璃会议室的门,“坐。”

周航坐下,一份合同摆在桌上,右下角贴着便签标注。他翻了翻,薪资、岗位、年终分红比例、项目跟投资格,一项项比着曹立民之前在电话里说的对。没有模糊地带,没有“视公司效益而定”这类话。他看到第五页时,曹立民递过来一支笔。

“不用急着签,你可以拿回去细看。”

“不用。”周航翻到最后一页,在签名栏写下自己的名字,日期填正月初七。他把合同推回去,曹立民接过来看了一眼,点头,叫人力进来盖章。

人力小姑娘拿着公章出去后,曹立民从包里掏出一个文件夹。“新机房部署图,昨晚上改的,你先看架构。”他翻开第一页,“核心业务系统我打算让你从头搭,不背星禾那套老包袱。数据库你选,中间件你定,团队给你五个名额,你自己招。”

周航翻着图纸,视线停在一处标注上。“这层楼是双路供电?”

“双路市电加UPS,柴发在负一层,测试报告在最后附页。”曹立民靠在椅背上,“你以前在星禾提过单点隐患,我记得。这次不给你留这个坑。”

周航没说话,手指在图纸上划了两下,在心里过了一遍拓扑。布局合理,余量够,布线规范。他把文件夹合上。

“走,去看看。”曹立民站起来。

新机房在七楼,占了半层。目前只有一排机柜立着,指示灯零星闪烁,空气里有新装修的淡味。周航走到配电柜前看了一眼铭牌,又绕到机柜背面检查走线槽。曹立民站在门口没跟进来,看着他拿手机拍了几张照片。

“还缺一台核心交换机。”周航说。

“后天到。”曹立民答得很快,“你报型号,我走采购。”

周航点点头,从电脑包里抽出一沓打印纸。那是他年前写的星禾运维制度建议,后来手改了几处,加了些新内容。他把纸摊在机房门口的操作台上,翻到第三页,用笔圈了一段,递给曹立民。

“这一条,紧急修复方案十二小时内响应。星禾那边我写了二十四小时,赵广年嫌太长,压着没发。山海这边如果走这个流程,我建议改成十二小时。”

曹立民接过来看,读完没急着表态。“十二小时意味着半夜也得爬起来。”

“那就不叫紧急方案了。”周航把笔帽扣上,“方案是给触发条件写的,不是给上班时间写的。”

曹立民看了他两秒,点头。“行,就按你这个来。制度你重写一版,下周一之前给我,走公司发文。”

“初十之前。”

“初十。”曹立民把纸还给他,“你家里还有事,我知道,不催。”

周航把打印纸收进包里,两人往电梯走。路过七楼走廊时,曹立民忽然想起什么:“对了,明州那个项目,他们技术负责人昨天给我打电话,说想正月十六碰第一次需求会。你时间上有没有问题?”

“没问题。”

“那我回他们。合同他们走加急,说争取这周把章盖了。”

电梯来了,曹立民没进去,站在门口跟他说:“你先回去,明天开始算正式工作日。今天初七,你回去陪家里人吃顿饭。”

周航下楼,坐进车里,拿出手机准备给林薇发消息。屏幕刚亮,一条银行入账短信跳出来。

他点开。

【山海科技(杭州)有限公司】于2025年2月4日向您尾号7831的账户存入人民币30000.00元,摘要:工资,备注:新年快乐。

他盯着那行字看了几秒。备注栏写着“新年快乐”,四个字,没有任何修饰。他往下滑,翻到上个月的记录,腊月廿七那天,同样的发薪账户,同样的摘要格式,金额50元,备注一栏写的是“众享红包”。

上下两条记录在屏幕上挨着,中间只隔了不到十行。他把截图裁了一下,发给林薇,没配文字。

林薇的电话马上打了过来。

“三万?”她声音里有克制的激动,语速比平时快了一点,“我看清楚了,是三万。备注还写了新年快乐。”

“嗯。刚签完合同,曹立民让我先回去。”

“你中午想吃什么?我让妈多做两个菜。”林薇顿了一下,声音低了些,“我昨天晚上还在算,如果星禾那边年终奖能补到五千,今年过年好歹像样点。现在不用算了。”

周航靠着驾驶座,没发动车。车窗外停车场里没什么人,保安在远处岗亭里看手机。他说:“不用算那个了。你截图留着,回头我把星禾那边的工资卡注销。”

“早该销了。”林薇语气里终于有了点笑意,“你回来吃饭吧,我让妈把那条鱼提前烧上。”

周航挂了电话,把手机放在副驾驶座上。中控屏上显示九点零四分,车库入口处有车灯晃了一下。他没急着走,把电脑包里那沓运维制度建议抽出来,折了折,放进副驾驶前面的手套箱里,跟车辆手册放在一起。

然后他发动车,从地库出口开上去。外面阳光很好,正月初七的杭州街头,路两侧的灯笼还挂着没收,红色连成一片。他汇入车流往家开,副驾驶上的手机屏幕又亮了一下,是曹立民发来的微信:“合同已录入,明天系统里给你开工号。另外,方卓刚给我打电话,问山海这边还缺不缺人。”

周航趁着红灯看了一眼消息,拇指在屏幕上停了两秒,回了一句:“等我回去问问他本人。”

绿灯亮了,他放下手机,踩下油门。

第十六章 赵广年的年礼

正月十五那天,周航正在阳台上给那盆冻伤的发财树剪枯叶,门铃响了。

林薇去开的门。门外站着一个跑腿小哥,手里拎着两瓶红酒,正红色礼盒装的,盒面上印着烫金的小篆字样,旁边还放着一个牛皮纸信封,封口处贴了张便签,上面用手写字体写了“周航亲启”四个字。跑腿小哥说下单的人留了话,东西放下就走,不用签收。

林薇把东西拎进客厅,冲阳台喊了一声:“周航,有人给你送东西。”

周航放下剪刀走进来,先看了看那两瓶红酒的包装,又拿起牛皮纸信封翻到背面,封口处除了便签没有别的东西。他撕开封口,里面是一张银行卡和一张对折的信纸。

信纸上的字迹他认得,是赵广年的。

“周航,过年好。年前的事,哥做得不周到,向你道歉。那五十块钱的事,是财务那边卡了预算口径,我后来才知道,已经批评过孙姐了。这五千块是哥个人补给你的年终奖,钱不多,是个心意。公司年后走了两个大客户,方卓也提了离职,系统这块没有你坐镇,我睡不踏实。你要是愿意回来,技术顾问的位子给你留着,价格你开,哥不还价。方便的话给我回个电话。”

信纸末尾是赵广年的手机号,字迹比正文大了一号,像是怕周航记不住。

周航把信纸放到茶几上,低头看着那张银行卡。中国银行的储蓄卡,崭新的,卡面没有签名条,应该是新开的户。五千块。他忽然想起腊月廿七那天早上,手机银行跳出来的那条入账记录,50元,备注“众享红包”。两笔钱之间的落差,比他一个月工资还多。

林薇在旁边看完了信,没急着说话。她拿起那张卡翻到背面看了一眼,又放回去,说:“赵广年亲自来的?”

“应该是找人送的。”

“你怎么想?”

周航没马上回答。他拿起手机,找到赵广年的号码,没拨出去,只是看着屏幕上那串数字。客厅里电视开着,某个地方台在播元宵晚会,主持人正用夸张的语气念灯谜。厨房里高压锅在滋滋冒气,丈母娘正在炖汤。

“钱得退回去。”周航说。

林薇点头:“我知道你要退。信呢?”

“信留着也无妨。”他顿了一下,“但不是因为他写了这封信,是因为这封信能提醒我一件事。”

“什么事?”

“技术人员的价值,靠别人给是给不出来的。”他把银行卡放在信纸上,两张纸叠在一起,“我退东西的时候,得让他明白这一点。”

林薇看了他一会儿,没追问。她从柜子里翻出一个干净的纸袋,把两瓶酒并排装进去,又把银行卡和信纸重新放进牛皮纸信封,封口折好,一起塞进纸袋里。整个过程像在做账,分门别类,位置清楚,不留多余的空隙。

“你打算怎么写?”她问。

周航坐到餐桌前,从公文包里抽出一张便签纸。他平时写运维日志写惯了,字迹小而工整,横平竖直。他想了想,提笔写了三行字。写完之后他对折了两次,递给林薇看。

林薇展开,上面写着:“赵总,东西退回,心意领了。方案我留了,制度您补了,人我就不回了。祝公司早日稳定。”

她看完没说话,把便签纸折回原样,放回牛皮纸信封,跟银行卡一起装好,塞进纸袋,然后拎起袋子看了看,像是在确认封口够不够整齐。

“我明天上午叫个同城快递送过去。”周航说。

“酒要不要拆开看看有没有问题?”

“不用,原样退。”

林薇把纸袋放到玄关鞋柜上,拍了拍手上的灰,回头看了他一眼。周航站在客厅中间,手里还捏着那封信,目光落在信纸末尾那行字上。

赵广年在信里提到方卓也走了。这件事周航是知道的。正月初三那天方卓来家里拜年,坐了不到半小时,说了很多话,走的时候整个人比在星禾公司那两年都精神。周航当时把复印的运维日志本递给他,方卓接过去翻了翻,手有点抖。那天晚上方卓给周航发了条微信,只有四个字:“谢谢师父。”

之后方卓去了哪家公司,周航没细问。曹立民前天倒是又发来消息,说收到方卓的简历了,见面聊了半小时,技术基础不错,准备给offer。周航回了一句“他比我当年强”,曹立民在语音那头笑了半天。

至于那两个大客户。周航上周在行业群里看到过消息,说星禾信息去年底稳住的几家客户今年续约意愿不高,有一家已经签了竞品。他没有细看,也没转发给任何人。

他把赵广年的信收进抽屉最里面,和那沓打印好的紧急修复方案放在一起。那沓方案他春节前从公司带回来就没再动过,纸页边角有点卷,但字迹清楚,表格整齐。方案封面右上角有赵广年当初签的处置意见,只有四个字:“年后再说。”

周航关上抽屉,走到玄关看了一眼那个纸袋。林薇已经用记号笔在袋口写上了收件地址和赵广年的名字,字体端正,像一张快递面单。

第二天上午,周航叫了同城快递,看着快递员把纸袋封好放进保温箱,骑电动车离开小区。他转身回家,拿起手机给曹立民发了条消息:“方卓这个人靠谱,你先用,不满意我兜底。”

曹立民秒回:“你推荐的人我放心。对了,下周开始搭新系统的架构,数据库表结构你这两天先出个初稿,团队几个人都等着看。”

周航回了个“好”。

他走到阳台把发财树剩下的枯叶收拾干净,给花盆浇了水。窗外小区里有人带着孩子放风筝,正月的风还硬,风筝飘得不稳,但线绷得很直。林薇从厨房探出头来问他中午吃饺子还是汤圆,他说都行。

手机又亮了一下,是方卓发来的消息:“师父,山海科技让我下周一入职,把我分到您组里了。”

周航看了一眼,打字回复:“到时候别喊师父,喊组长。”

发完之后他把手机揣进口袋,站在阳台上看了一会儿那只风筝。风从湖面方向吹过来,带着一点湿漉漉的寒气。他想,过完正月,该把工位那张全家福重新洗一张了,原来那张还是三年前拍的,儿子那时候还抱在手里,现在已经能自己放风筝了。

十五那天上午,周航正陪儿子在楼下放风筝,手机响了,是个陌生号码。接起来是赵广年的司机老黄,说赵总让他送点东西过来,已经到小区门口了。

周航走过去一看,老黄从后备箱拎出两瓶酒和一个牛皮纸信封,笑着说:“赵总特意交代,必须交到您手上。”

周航接过来,信封厚实,捏得出里面有个硬卡片。他没当场拆,回家后坐到沙发上打开。信封里是一张五千块的转账支票和一封手写信,赵广年的字迹潦草,写满了一页纸。大意是:今年开春公司丢了两个大客户,星禾那边人心散了,方卓也递了辞职。他思来想去,还是觉得周航最清楚这套系统。希望周航能回去做技术顾问,不用坐班,远程支持就行,价格好谈。

周航看完,把信纸翻过来放在茶几上。林薇从厨房出来,瞥了一眼那两瓶酒,没说话。

他拿起手机,翻到赵广年的号码,打了过去。响了三声,那头接了。

“赵总,东西收到了。”周航语气很平,“酒和钱我让老黄带回去,您别费心。方案我留了,制度您补了,人我就不回了。”

电话那头沉默了几秒,赵广年叹了口气,说了句“那行吧”,就挂了。

周航把支票和信纸装回信封,下楼叫住还没走远的老黄,原样递了回去。老黄一脸为难,周航拍了拍他肩膀:“跟赵总说,我家里还有盆花要养。”

他转身上楼,听见儿子在阳台上喊他快来看风筝。

(全文完)

文章虚拟演绎,请勿当真。