第一章 凌晨三点的惨白荧光

2023年9月15日,凌晨2:17。

杭州未来科技城,海创园23号楼22层,星途金融科技有限公司的整层办公区,只有项目一部的灯还亮着。惨白的荧光灯透过玻璃隔断漫出来,在空无一人的走廊里铺成一片冷硬的光海,风从消防通道的窗户缝里钻进来,卷起地上散落的A4纸,发出哗啦一声轻响,在死寂的办公区里显得格外刺耳。

周砚坐在工位上,指尖的鼠标滚轮已经滑了整整十七分钟。

面前的三块显示器亮得晃眼,最左侧是农商行新一代核心系统的架构拓扑图,红色的标注线密密麻麻缠在清算模块上,像一道解不开的血痕;中间的屏幕是代码仓库的提交记录,黑色的代码一行行往下滚,每一个字符都像针一样扎进他布满红血丝的眼睛里;最右侧的屏幕钉着甲方银行科技部发来的上线倒计时通知,加粗的红色字体明晃晃地写着:距9月17日正式割接上线,剩余45小时23分钟。

保温杯里的美式咖啡早就凉透了,杯壁上结着一层褐色的咖啡渍,杯口沾着半片干掉的润喉糖糖纸。桌角堆着三个空了的红牛易拉罐,罐身被捏得变了形,旁边还有半盒没吃完的速冻饺子,是昨天晚上行政帮忙订的夜宵,饺子皮已经硬得像纸板,一口没动。

他已经连续熬了两个通宵。

从9月13号甲方敲定最终上线时间开始,整个项目组三十多个人,就被钉在了这层写字楼里。键盘敲击声从白天的密集如雨,到后半夜的稀稀拉拉,现在只剩下零星几声,混着远处工位传来的轻微鼾声,在密闭的空间里发酵出一股浓重的疲惫感——速溶咖啡的焦苦味、外卖盒的油污味、密闭空间里的汗味,还有人身上散发出的、连续几天没洗澡的酸馊味,搅在一起,成了互联网职场加班夜最标志性的气味。

周砚今年32岁,是这个标杆项目的技术经理。

从2021年项目立项开始,整整两年零八个月,他带着技术部的八个人,从需求调研到架构设计,从代码开发到联调测试,几乎把命铺在了这个项目上。这是星途科技成立以来拿到的最大一笔订单,合同额1.2亿,占了公司全年营收的32%,更是公司明年冲击科创板的核心标杆项目。成了,他顺理成章升技术总监,年薪翻倍,拿到公司的原始股权,刚在杭州买的、每个月一万八的房贷,还有家里刚怀孕三个月的老婆,都能落个安稳。

败了,他第一个滚蛋。

在金融科技这个圈子里,核心系统项目搞砸了,就等于在行业里给自己的职业生涯判了死刑。没有哪家银行敢用一个出过重大生产事故的技术负责人,也没有哪家公司敢接一个带着污点的从业者。

“周、周经理……”

怯生生的声音从工位旁边传过来,带着点不易察觉的哭腔,像一片羽毛轻轻扫过紧绷的弦。周砚猛地回过神,抬头就看见苏晓冉站在他的工位旁,怀里抱着一台14寸的笔记本电脑,指尖把电脑边缘攥得发白。

苏晓冉是今年刚毕业的应届生,测试部的实习生,进项目组才三个月。脸上还带着没褪干净的学生气,黑框眼镜滑到了鼻尖,眼睛红红的,眼底下是浓重的青黑,显然也熬了不止一个通宵。她身上的白色T恤皱巴巴的,领口还沾了一点咖啡渍,整个人像一只被雨淋湿了的幼猫,站在那里,浑身都透着不安。

周砚揉了揉发胀的太阳穴,声音哑得厉害:“怎么了小苏?测试用例都跑完了?”

“不是……”苏晓冉往前凑了半步,把笔记本电脑放到他的桌角,屏幕往下压了压,生怕被别人听见,声音压得极低,“我……我发现了一个问题,清算模块的定期结息逻辑,有个边界条件没覆盖到。”

周砚的心脏猛地沉了一下,指尖瞬间绷紧。

清算模块,是整个银行核心系统的心脏。银行的本质,就是账务的流转与核对,一分一厘都不能差。清算逻辑出问题,就等于人的心脏跳错了节拍,轻则账务不平,重则资金流失,是能直接惊动银保监会的重大生产事故。

他把笔记本拉到自己面前,指尖点开了苏晓冉整理的测试报告。复现步骤、测试数据、报错截图、日志记录,整整齐齐,一看就是对着这个问题啃了很久。越往下看,周砚后背的冷汗就越冒越多,顺着脊椎往下滑,把贴在身上的衬衫浸得冰凉。

不是小问题。

是底层逻辑的致命缺陷。

赵凯三个月前私自简化了结息逻辑,把跨周期大额定期存款的结息场景给砍掉了。按照现在的代码逻辑,一旦遇到存期跨了利率调整节点、且本金超过500万的大额定期存款,结息时就会出现单边账——借方记账成功,贷方记账失败,资金平白无故消失,而且系统无法自动冲正,只能后台手动调账。

更致命的是,这个逻辑缺陷,在常规的小额测试用例里根本复现不出来。只有单笔本金超过500万、且存期跨了央行利率调整窗口的极端场景,才会触发。而苏晓冉,是昨天晚上整理历史数据时,偶然翻到了农商行有127笔符合这个条件的大额定期存单,才抱着试一试的心态搭了测试环境,结果一测一个准。

“刘姐知道这个事吗?”周砚抬头看向苏晓冉,声音里带着他自己都没察觉到的颤抖。

刘梅,测试部的负责人,也是苏晓冉的直属领导,今年40岁,在星途科技干了八年,是公司里最资深的测试工程师。

苏晓冉的眼圈瞬间更红了,嘴唇抿得紧紧的,半天才小声说:“我昨天下午就跟刘姐说了……刘姐说,现在是上线前的关键期,这种极端场景,一万笔交易里都碰不到一笔,让我先记下来,上线后再迭代修复,还说……还说让我别给项目添乱,不然实习期过不了。”

周砚闭了闭眼,脑子里嗡嗡作响。

他早就该想到的。

三个月前,开发组的组长跟他提过一句,说产品部那边让改清算模块的结息逻辑,缩短清算时长。当时他正在忙架构评审,随口问了一句有没有正式的需求变更单,开发组长说赵凯说是甲方口头要求的,回头补流程。他那时候被评审会、甲方的需求变更、还有张总催进度的电话搞得焦头烂额,转头就把这事给忘了。

他以为赵凯会补流程,以为测试部会覆盖全场景,以为就算有什么小问题,联调阶段也能测出来。

可他忘了,在这个所有人都被工期和KPI绑在悬崖边的项目里,每个人都在选择性地看不见那些不该看见的东西。每个人都在心里抱着一丝侥幸:不会那么巧的,不会出事的,就算出事,也有别人担着。

他猛地站起身,椅子腿在地板上划出刺耳的声响。旁边工位几个趴着睡觉的开发被惊醒了,迷迷糊糊地抬头看他,他没理会,攥着拳头,大步往产品区走。

赵凯正趴在工位上睡觉,脸上盖着一件黑色的冲锋衣,整个人缩在办公椅里,呼噜声隔着几米都能听见。他是这个项目的产品经理,今年28岁,是部门总监张敬山一手提拔起来的红人。嘴甜,会来事,能把甲方哄得团团转,也能拿着鸡毛当令箭,把技术部和测试部拿捏得死死的。整个项目组,没人不烦他,可没人敢得罪他。

周砚一把掀开了他脸上的冲锋衣。

赵凯猛地惊醒,一脸的起床气,揉着眼睛骂道:“周砚你有病啊?老子刚眯了十分钟,你催命呢?”

“我有病?”周砚把手里的笔记本狠狠怼到他面前,屏幕上是那份bug报告,还有代码提交记录,“赵凯,你告诉我,三个月前,清算模块的结息逻辑,是你让开发改的?需求变更单呢?架构评审记录呢?甲方的盖章确认函呢?你拿出来给我看看!”

赵凯的脸色瞬间白了,眼神下意识地躲闪了一下,随即又恢复了那副吊儿郎当的样子,伸手把笔记本推开,满不在乎地说:“嗨,我当是什么天大的事呢,就这个啊。甲方李总那边口头要求的,说原来的清算逻辑太复杂,季度结息的时候要跑四个多小时,他们网点的人要通宵加班,让我们优化一下,缩短时长。我就跟开发打了个招呼,简化了点逻辑,怎么了?”

“怎么了?”周砚气得笑了,声音压得极低,却带着压不住的火气,“现在出致命bug了!跨周期大额定期结息会出单边账,账务直接对不上!赵凯,你干这行五年了,你知道银行账务不平意味着什么吗?是重大生产事故!银保监会直接介入,项目尾款全扣,我们所有人都要担责任!”

“哪有那么危言耸听?”赵凯的声音虚了一点,却依旧硬撑着,伸手点了点屏幕,“一个实习生测出来的极端场景,你也当真?整个农商行,符合这个条件的存单能有多少?一百多笔?几十万笔交易里才一百多笔,就算真的触发了,我们后台手动调账不就行了?上线后偷偷把逻辑改回来,神不知鬼不觉。”

他往前凑了凑,拍了拍周砚的肩膀,语气里带着点拿捏的意味:“周砚,咱们俩是一条船上的人。这个项目成了,你升技术总监,我升产品总监,大家都有奖金,都有股权。项目黄了,你我第一个滚蛋。现在还有不到48小时就要上线了,你现在把这个事捅出去,整个项目直接停摆,工期延误,甲方追责,张总第一个拿你开刀。你忘了去年的城商行项目,是谁在张总面前帮你扛的锅了?”

周砚的喉咙像是被什么东西堵住了。

去年的城商行项目,他因为架构设计的疏漏,上线后出现了批量开户失败的问题,虽然很快就修复了,但是甲方投诉到了公司总部。是赵凯拿着一堆甲方临时变更需求的记录,在张敬山面前扛下了大部分责任,说是甲方频繁改需求导致的,才让他只落了个口头警告,没影响绩效考核,也没在他的履历上留下污点。

这份人情,他一直欠着。也是赵凯一直以来,拿捏他最有效的筹码。

“这个事,你必须给我补全所有的变更流程,甲方的确认函,必须要有。”周砚的声音软了下来,他自己都能听见语气里的妥协,“不然,真出了事,我担不起这个责任。”

赵凯的眼睛瞬间亮了,立刻拍着胸脯说:“放心!包在我身上!甲方那边我下午就去对接,确认函肯定给你补回来!绝对不会让你担责任!”

周砚没再说话,转身走回了自己的工位。

他心里清楚,赵凯根本拿不到甲方的确认函。那个所谓的“甲方口头要求”,十有八九是他自己编的——农商行的科技部总经理李建国,为了赶在退休前做出政绩,给这个项目定了几乎不可能完成的工期,赵凯为了讨好甲方,为了让项目按时上线拿到奖金,私自简化了核心逻辑,却连最基本的风险评估都没做。

可他还是选择了妥协。

他坐回工位,看着窗外。天已经蒙蒙亮了,淡青色的天光从写字楼的玻璃幕墙外透进来,远处的未来科技城,一栋栋钢铁楼宇在晨雾里露出轮廓,像一片沉默的森林。风从窗户缝里吹进来,带着初秋的凉意,吹在他的脸上,他却觉得浑身发烫,心里像压着一块烧红的烙铁。

苏晓冉还站在他的工位旁边,眼巴巴地看着他,眼里带着期待,也带着不安。

周砚看着这个刚毕业的小姑娘,想起了十年前的自己。那时候他刚从大学毕业,进了行业里顶尖的金融科技公司,眼里容不得一点沙子。发现一个bug,就算通宵三天三夜也要改完;发现需求不合规,就算被领导骂、被同事排挤,也要坚持走完整的评审流程;那时候他觉得,做技术的,底线就是生命线,一分一毫都不能让。

可什么时候,他变成了现在这个样子?

他闭了闭眼,再睁开时,语气里带着连自己都觉得陌生的疲惫和敷衍:“小苏,这个问题,你先记录到待修复清单里,标注为低优先级。上线后的第一个迭代,我们立刻修复。现在,先按原计划推进上线准备工作。”

苏晓冉的眼睛一下子红了,声音里带着哭腔:“周经理,这个bug真的很严重!要是上线了,批量结息的时候触发了,怎么办?到时候就晚了!”

“不会出事的。”周砚避开了她的眼睛,低头看向自己的电脑屏幕,指尖无意识地摩挲着鼠标,“触发概率极低,就算真的出了问题,我们有应急预案,可以手动处理。你别再说了,去忙吧。”

苏晓冉站在那里,愣了很久,最终还是低着头,抱着笔记本走了。她的背影很单薄,带着满满的委屈和不解,一步一步,走得很慢。

周砚看着她的背影,拿起桌上的凉咖啡,狠狠灌了一大口。苦涩的液体滑过喉咙,他却尝不出一点味道,只觉得心里有什么东西,一点点碎掉了。

他以为,只要假装没看见,只要把这个问题藏起来,只要项目按时上线,他就能躲过这一劫。他以为,这是别人犯的错,他就算睁一只眼闭一只眼,也不用承担什么代价。他以为,他能从这场所有人都心照不宣的敷衍里,全身而退。

可他不知道,错误就像一颗埋在土里的毒种子。从他选择沉默的那一刻起,这颗种子就已经在他看不见的地方,扎了根,发了芽,只等着某个时刻,破土而出,把所有人都拖进深渊。

他更不知道,在这个偌大的办公区里,不止他一个人,在假装看不见那些正在滋生的错误。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容