楔子
年终抽奖的大屏幕上,十套房的获得者名单依次滚动出来。九十九个人围在舞台下面鼓掌、尖叫、互相拍肩膀。
周却站在人群外围,看着屏幕上第十个名字亮起来——不是他。
抽奖系统是他半年前亲手做的。他比任何人都清楚,那个名单本应该有十一个名字。
但他什么都没有说。
第二天下午,他在对家公司总部签了一份三年的框架协议,总额三亿两千万。签完最后一页的时候,他的手机响了。屏幕上的名字是"刘总"——他做了七年的老板。
"周却,你现在在哪?"
"在跟你对家的会议室里。"
"我看见你了。你背后那扇落地窗,我认得。"
周却回头。对面那栋楼里,刘威正站在窗户前面看着他,手里举着手机。
两人隔着一整条街的距离对视了大约三秒。周却把手机从耳边拿下来,挂断了电话。
他转回身,跟对家的总裁握了手。
第一章. 名单
年会那天的宴会厅铺了一层暗红色的地毯,舞台两侧各放了两个立式音箱,低音炮在播放暖场音乐的时候把桌面上的杯子震得微微颤动。
周却坐在第十桌,靠柱子的一侧。他面前的餐盘里放着一块没动过的蛋糕,杯子里的饮料已经没气了。从他这个角度能看到舞台大屏幕上滚动着的抽奖界面——界面底部的进度条在持续前进,每跳出一个人名,台下就爆发一阵夹杂着口哨和拍桌声的欢呼。
第十套房抽完的时候,大屏幕上定格了最后一个人名。主持人用麦克风把那个名字重复了两遍,全场又响了一次掌声。然后屏幕切换到了下一个环节的幻灯片——年度业绩回顾。
周却在那个定格画面上停留了几秒。第十个名字旁边有一个"已抽中"的状态标签,绿色底白字。他没有再看那个标签,把视线移到了桌面的餐盘上。蛋糕上的奶油已经塌了一些,边缘的草莓因为暴露在室温里太久开始析出一点汁水。
坐在他旁边的同事——技术部的方绪——侧过头来压低声音说了一句:"周却,你那个抽奖系统是不是出了什么问题?你给自己也写了程序吧?"
"写了。"
"那怎么没有——"
"系统逻辑是'从符合条件的名单中随机抽取十人'。我的名字在符合条件的名单里。但展示环节只展示了前十名的排序。"
方绪安静了两秒。"你的意思是抽了十一个?"
周却没有点头也没有摇头。他拿起那杯没气的饮料喝了一口,放下来的时候杯底在桌布上印了一个浅色的水圈。"抽奖系统的抽取过程是独立于展示界面的。展示界面只输出前十人的名单,生成获奖记录。"
"那第十一个人的记录呢?"
"存放在后台日志里。"
方绪张了张嘴,没有再问下去。他看了一眼舞台上的大屏幕,又看了一眼周却的侧脸,然后转回去继续看舞台方向的节目了。
年会进行到后半段的时候,周却从座位站起来,沿着宴会厅的边缘走到了靠近出口的位置。他没有回头看舞台,推开侧门走了出去。走廊里的温度比宴会厅低了好几度,他站在走廊尽头的窗户前面,把手机掏出来打开了一个后台管理界面。
他在输入框里输了一行指令,调出了抽奖系统的日志记录。日志里显示了十一个获奖记录,第十一条的时间戳比第十条晚了零点三秒,对应的工号是周却的工号。状态栏旁边标注了一行小字:"已生成,未展示。"
他把手机锁屏了。
第二天上午,周却请了半天假。他坐在公寓的书桌前打了一个电话。接电话的人是盛恒集团的总裁——盛恒是锦程科技最大的竞争对手,两家公司在同一个赛道上竞标了将近十年。
"陈总,我是周却。您之前提的那个供应链框架整合的事,我现在可以谈了。"
陈铮在电话那头沉默了一秒。"周却,你从锦程出来了?"
"还没走。但我可以走。"
"那你什么时候能签?"
"下午。"
第二章. 街道
周却到盛恒总部的时间是下午两点十分。
他在前台报了名字,前台核实之后把他带到了十八楼的会议室。陈铮已经在会议室里坐着了,面前摊着一份打印好的合同,旁边放了一杯没动过的水。他看见周却进来就站起来,隔着会议桌伸了一下手。
"周却,我等这个电话等了很久了。"
周却跟他握了手,在会议桌另一侧坐下来。"陈总,合同条款之前邮件里已经过了一遍。我这边没有大的修改意见,框架金额和合作周期都按邮件确认的执行。"
陈铮把合同推过来。"你再看一遍,特别是第三条的排他性条款。如果没问题,今天就能签。"
周却拿起合同翻到第三页读了一遍。排他性条款写的是"在本协议有效期内,乙方(即周却)不得以任何形式为锦程科技及其关联方提供服务或技术支持"。他看完之后把合同合上了。
"第三条没有问题。我离开锦程之后不会以任何身份为那边做任何事。"
他在合同末尾签了名字。笔尖在纸面上移动的时候发出极轻的摩擦声,沙沙的,在安静的会议室里比平时更清晰。他签完之后把合同推回去,陈铮在自己的那一栏签了字。
"周却,合同里这个金额是三年的总额,逐季度释放。你带团队过来的话,薪资结构按你提供的方案走。"
"团队的事我回去确认一下。能带走的人我尽量带走,带不走的——"
他的手机在这时候响了。
他看了一眼屏幕上的名字——刘威。他握着手机站起来走到窗边,接听了电话。对面传来的声音很平稳,跟平时在办公室里布置工作时的语气差不多:"周却,你现在在哪?"
周却站在十八楼的落地窗前面。这扇窗户朝南,能看到对面那条街和锦程科技所在的写字楼——它比盛恒总部矮了几层,外墙是灰色的,在下午的光线里显得比平时暗一些。他看见那栋楼中间的某一层有一扇窗户前面站着一个人,那个人也正拿着手机,正对着他这边。
"在跟你对家的会议室里。"
"我看见你了。你背后那扇落地窗,我认得。"
周却站在窗前,隔着街道的距离跟刘威对视。两栋楼之间的空气在午后的阳光下微微晃动着,像是有一层极薄的热浪在中间浮动着。他看见刘威站在对面那扇窗户后面的轮廓在光线下显得有些模糊,但站姿是确定的——双手垂在身侧,手机举在耳边。
他没有再多说什么,把手机从耳边拿下来,按了挂断键。
手机屏幕暗了下去。
他把手机放回外套口袋里,从窗边转过身来。陈铮站在会议桌旁边,手里拿着签好字的合同副本。他看了一眼周却的表情,没有问那通电话是谁打来的,只问了一句"走吗"。
周却点了一下头。两个人一起走出了会议室。
电梯下行的时候周却看着楼层数字一格一格地跳动。陈铮站在他旁边,手里拿着合同副本,目光落在电梯门上方那个数字显示器上,没有说话。到了大堂他们走出去,阳光从大门外的街道上涌进来,在深色的地砖上铺了一块明亮的光面。
周却在大堂的门口停了一步。"陈总,我明天正式办离职,然后过来报到。"
"需要我这边出函给锦程那边吗?"
"不用。我自己处理。"
陈铮点了点头,转身走向了停车场的方向。周却站在盛恒总部的大门口,看了一眼街道对面那栋灰色的楼。刘威已经不在那扇窗户前面了,窗口空着,午后的阳光照在玻璃上形成一片耀眼的白色反光。
他收回目光,走下台阶,沿着街道往地铁站的方向走了。走了大约三十米之后他在一个十字路口停下来等红灯,低头看了一眼手机——屏幕上没有新的消息。他把手机重新放回了口袋里。
红灯变绿了。他迈步走过了斑马线。
第三章. 离职
周却在周三上午提交了正式离职申请。
他在OA系统里填了表格,离职原因一栏选了"个人发展",备注栏留了空白。提交之后系统进入了审批流程——第一级是部门主管,第二级是人力资源部,第三级是总裁办。
当天下午部门主管在系统里点了"同意"。人力资源部在傍晚之前也走了流程。只有总裁办那一级的状态一直显示"待处理",停留了将近一整天没有变化。
第二天早上周却到公司的时候,他工位旁边的文件夹里多了一张手写的便签,字迹他认识——刘威的。便签上写了一行字:"离职流程先暂停。下午三点到总办来一趟。"
周却把便签看了看,折好放进了抽屉里。他没有点击OA系统的任何操作,打开电脑继续处理当天的工作。
下午三点他准时到了总办门口。门半开着,他敲了一下门框,刘威在里面说了一声"进来"。
刘威坐在办公桌后面,面前放着一杯已经凉透的茶和一份打开的文件夹。他看见周却进来,把文件夹合上了,靠在椅背里看着他。
"周却,你在公司做了七年。这七年里你从基层做到技术总监,系统架构是你搭的,供应商管理接口也是你做的。为什么离职?"
周却站在办公桌前面,双手垂在身侧。"刘总,离职申请上写了个人发展。"
"个人发展具体是什么意思?"
周却沉默了几秒。"刘总,抽奖系统的后台日志你看了吗?"
刘威的目光在他脸上停了一下。他没有说"看了"也没有说"没看",只是交叉放在桌面上的手指微微收紧了一下。
"那个系统是公司请第三方做的,我不过问具体的技术细节。"
"系统是我开发的。抽奖环节的规则是'从符合条件的名单中抽取十人'。但抽取算法的输出结果包含了十一个条目。第十一条记录被展示界面过滤掉了,没有出现在大屏幕上。"
刘威的手指在桌面上放平了。"周却,抽奖系统出了什么问题,行政那边会处理。"
"刘总,问题不是系统出的,是展示逻辑被改过。展示界面的代码在执行的时候加了一层筛选条件——'只输出与活动规则匹配的前N条记录'。N的值在活动开始前被设定为10,但抽取过程的输出是11。"
周却说到这里停了一下,然后继续:"那个筛选条件的配置时间戳是活动开始前一天。操作人的权限级别是总办助理。我没有修改那个条件。"
办公室安静了几秒。刘威的目光落在桌面上那条缝隙里,像是在核对什么。他重新抬起头来的时候视线里带着一种周却没有见过的神情——不是愤怒,是一种正在重新计算某种数值的状态。
"周却,你今天来的目的是什么?"
"来跟您说一声,离职流程我下午会重新提一次。总裁办的审批需要您这边过,我想当面跟您确认。"
刘威靠在椅背里,目光在周却的脸上停了一会儿,然后他开口说了一句意料之外的话:"你对面签的那份合同,有效期是三年?"
周却站在办公桌前,双手依然垂在身侧。"刘总,您看到的是合同的封面还是正文?"
"封面。和落款页。你签完字站在窗边打电话的时候,我看见了合同封面上印的金额和对方公司的名字。"
周却没有接话。
刘威从椅子里站起来,走到窗边背对着周却站了一会儿。窗外的光线从侧面照进来,把他肩膀的轮廓勾勒成一条深色的线。
"周却,如果我把抽奖系统的日志调出来做一次公开复盘,你会不会重新考虑离职的事?"
周却站在办公桌前面,看着刘威背对着自己的方向。"刘总,日志复盘只能展示那天晚上发生了什么。展示不了那天晚上我坐在第十桌看到屏幕上第十个名字时是什么状态。"
刘威没有转身。他站在窗户前面,右手搭在窗台上,手指在窗台边缘轻轻叩了两下。
"那你的团队呢?你也带他们走?"
"技术人员的选择是他们自己的事。我不会主动说服任何人跟我走。"
刘威转回身来,走回办公桌后面坐下来,重新打开了面前那个文件夹。他没有再看周却,在文件夹的某一页上签了一个字,然后把文件夹合上了。
"离职流程你可以走了。"
周却转身走出了总办。门在他身后关上的时候发出一声很轻的"咔嗒"。他沿着走廊走回自己的工位,打开OA系统重新提交了一次离职申请。这一次系统里的审批流程走得很快——主管、人力资源、总裁办三个节点在十五分钟内全部变成了绿色"已通过"状态。
他坐在工位上把电脑里的个人文件做了最后的清理,把系统权限的移交确认表单填完提交了,然后把桌面上几件私人物品收进了一个纸袋里——一个保温杯、一本旧笔记、一支别人送的钢笔。
离开办公室之前他站在工位前面几秒,看了一眼屏幕上的系统桌面——背景是默认的蓝色壁纸,任务栏上并列着几个已经关闭了的工作窗口。他伸手把显示器关掉了。屏幕黑下来的时候,上面的倒影也消失了。
他走出办公楼的时候外面下着小雨。雨不大,落在肩膀上像是一层细密的凉意,但没有到需要撑伞的程度。他沿着街道往地铁站走,经过街角那家便利店的门口时他看到雨滴在店招的灯箱上凝成细小的水珠,顺着表面慢慢滑落。
他没有停下来。
第四章. 邮件
周却到盛恒正式报到的那天是周一。
陈铮安排他在十八楼靠走廊尽头的一间独立办公室里办公。办公室不大,窗户朝北,能看到后方一片居民区的屋顶和远处几栋写字楼的上半截。桌面上放着一台新电脑和一套办公文具,旁边还有一个空的文件架。
他坐下来打开电脑,先登录了盛恒的内部系统熟悉了一下界面布局,然后把供应商数据平台的访问权限做了初始配置。陈铮一上午没有来打扰他,只在他到的时候在走廊里打了个照面点了一下头。
周却在当天下午收到了第一封邮件。发件人是盛恒的技术对接人,邮件里附了一份盛恒供应商接口的详细文档,文档末尾有一行手打的备注:"周总,这部分接口逻辑跟锦程那边不太一样,数据字段和认证方式不同,您看一下。"
他把文档看完了,在几个字段旁边做了标注,然后回复了一封邮件把标注的内容发还给了技术对接人。
接下来的三天里他每天的工作节奏大致固定。上午跟盛恒技术团队开短会对接接口状态,下午看供应商数据的格式文档,晚上下班前整理当天的进度。办公室里的温度恒定为二十二度,窗外的季节正在从深秋向初冬过渡,居民区屋顶上的银杏树叶子已经落了大半,剩下一层稀稀疏疏的黄挂在枝头上。
周四下午,他的个人邮箱里收到了一封来自锦程科技旧同事的邮件。发件人是技术部的方绪,邮件正文很简短:"周却,你走之后公司把抽奖系统的运维权限转移给了一个外部团队。他们查日志的时候发现了第十一条记录,正在跟行政部做复盘。听说行政部那边在补一个'技术故障导致名单遗漏'的说明文档。"
周却坐在办公室里把那封邮件读了一遍。窗外的光线从百叶窗的缝隙里透进来,在桌面和键盘上留下平行的光带。他把手放在键盘上,手指悬在按键上方停了几秒,然后敲了一行回复:"收到。技术故障说明怎么写,由行政部自己定。"
发完之后他把邮件窗口关闭了,继续查看供应商接口文档上的数据格式说明。
周五下午,他收到了第二封来自锦程的邮件。这次的发件人是锦程人力资源部——一封正式的通知函,内容是关于离职交接流程的最终确认。通知函里列了一份标准化的离职交接清单,所有项目都标注了"已完成"的绿色勾选标记,最后的结论栏里写了一行字:"周却同志已完成全部离职交接手续,即日起与本公司无劳动关系。"
他把那封通知函存了下来,然后关闭了邮件页面。
那天傍晚他走出盛恒总部的时候天色已经开始暗了。街道上的路灯亮了起来,把路面上残留的雨水反光点映成一个个细小的亮斑。他走过十字路口的时候抬头看了一眼对面那栋灰色的写字楼——锦程科技的楼,跟盛恒总部隔着一条街,侧对着,从这个角度能看到那栋楼东面的几排窗户。
那几排窗户里亮着一些灯,跟周围其他建筑的灯光混在一起,区分不出来哪几扇是锦程的办公室。他看了几秒,然后移开了视线,走向了公交站的方向。
他在公交站台的长椅上坐了下来,拿出手机翻到方绪发来的那封邮件又看了一遍,然后锁了屏。公交车从远处驶过来了,车灯在渐暗的天色里亮着两团稳定的暖白色光。
他站起来走到站台边缘,等着车门打开,然后上了车。
第五章. 架构
周却在盛恒的第三周开始着手供应商数据接口的整体架构调整。
盛恒原本的供应商接口系统跟锦程的架构逻辑类似但细节差异很大,数据字段的命名规则和认证方式都不一样。他花了一周时间把盛恒的现有接口文档完整读了一遍,又跟技术团队开了几次会,确认了各个模块的现状和可用性。
第四周的时候他在白板上画了一张架构图,把供应商数据的接入、存储、校验、转发四个模块重新设计了一版,耦合度比现有系统低了不少。他在图下方标注了几行关键说明,拍了一张照片发给了技术团队的工作群。
技术团队的回复比他预想的快。第二天上午他们就提出了几个关于数据校验模块的细节问题,周却在白板上又补了一张校验逻辑的流程图,把各个检验节点的触发条件和输出形式标注清楚了。技术团队看了之后没有再提出大的疑问,按他画的图开始做模块拆分。
架构调整的过程中周却每天有一半的时间在跟技术人员对接进度,剩下的一半时间在整理盛恒供应商的历史数据。他注意到盛恒的供应商数据在近两年的维护过程中存在一些字段不一致的情况——有些供应商在A类字段里填了数据,有些在B类字段里填了对应的内容,两套数据并存在系统里造成了查询时的冗余检索。
他做了一张对照表,把不一致的字段逐条列出来,在旁边标注了标准化的合并规则。技术团队拿到对照表之后做了一次批量清洗,把两套数据合并到了统一的结构里。清洗完成之后的第二天,盛恒采购端的人反馈说系统查询速度比之前快了一些。
周却在工位上收到了采购端同事的消息:"周总,接口查询比之前快了不少。今天上午查了三笔数据,基本秒出。"
他回了一个"那就好"。
第五周的一天下午,他在整理旧数据的时候翻到了锦程科技的一份公开报价单。那份报价单是半年前发布的,报价区间跟盛恒目前的供应商成本结构有部分重叠。他把报价单里的数据跟盛恒的数据做了一个脱敏对比,发现盛恒在几个品类上存在百分之六到八的成本优化空间。他在笔记本上记下了那几个品类对应的供应商编号,没有在系统里做任何改动。
当天傍晚他走出办公楼的时候又看到了对面那栋灰色的写字楼。锦程科技的楼从这个角度能看到西侧的立面,阳光在玻璃幕墙上反射出一层偏冷的色调。他在门口停了一步,把外套的拉链拉上去了一些,然后走下台阶沿着街道走了。
他经过那家便利店的时候没有停下来。
第六章. 合同生效
框架协议的生效日期是十二月一日。
周却在生效日的前一天把第一季度的合作框架执行方案发给了陈铮,方案里包括了供应商资源池的初步梳理和接口对接的排期表。陈铮看完之后在系统里回复了"按方案推进"。
生效日当天上午,盛恒的技术团队完成了供应商数据接口的第一个模块部署。周却在办公室里验证了模块的运行状态,确认数据能够正常通过校验节点进入存储层,然后把验证结果同步给了采购端的同事。
下午他在系统里看到了第一条通过新接口流入的供应商报价记录。记录显示的数据格式跟他设计的架构完全一致,没有出现字段错位或缺失的情况。他把那条记录截了个图存进了工作笔记的文件夹里。
同一天傍晚,他收到了方绪的第三封邮件。这次邮件的内容比前两次长了一些:"周却,抽奖系统的复盘结论出来了。行政部的'技术故障说明'最终没有通过,管理层要求重新审查名单生成的完整流程。听说技术部正在配合审计部门做一次全面的系统输出比对。"
周却坐在办公室里把那封邮件读完,然后回了一封简短的消息:"收到。你那边如果需要调用我之前的系统设计文档,我在离职前已经全部上传到公共盘了。"
方绪回了一个"好的"。
十二月第二周的一天中午,周却在盛恒食堂吃饭的时候碰见了陈铮。陈铮端着餐盘坐到了他对面,先吃了几口饭,然后抬头说了一句"接口模块跑得比预期快"。
"技术团队配合度比我预想的好。"
陈铮把筷子放下,喝了一口汤。"锦程那边的消息你听说了没有?他们在做内部审计,范围包括年终活动相关的流程。审计周期大概一个月。"
周却把碗里的饭吃完,把筷子放在餐盘上。"锦程的内部审计不涉及盛恒这边的工作内容。我目前的所有精力都在接口部署上。"
陈铮点了点头,没有继续这个话题。他端起餐盘站起来走了之后,周却在食堂多坐了一会儿,把碗里剩下的汤喝完了,然后把餐具放回了回收台。
那天下午他在办公室整理供应商数据的时候,在系统里无意中看到了盛恒过去一年跟几家核心供应商的框架续约记录。其中一家供应商的续约价格比市场均价低了不少,他在自己的笔记本上记下了那家供应商的编号和合同到期时间,然后继续处理手头的接口文档。
傍晚下班的时候他走在街道上,经过十字路口的时候抬头看了一眼对面那栋灰色的写字楼。楼上的灯亮了一大半,在冬夜暗蓝色的背景上像是一个个发亮的格子。他在路口等红灯的时候多看了那栋楼几秒,然后红灯变绿了,他穿过斑马线走向了公交站。
公交站台上有人在看手机,有人在听耳机,有人在跟旁边的人说着什么。周却站在站台边缘,双手放在外套口袋里,安静地等着。公交车从远处驶过来了,车灯在夜色中越来越亮,越来越近。
车门打开的时候他侧身上了车,在靠窗的位置坐下来。窗外的城市夜景在车子启动之后开始向后移动,路灯和广告牌的光在玻璃上一道一道地掠过。
他靠着车窗坐了一路。
第七章. 审计结果
十二月下旬,锦程科技的内部审计结束了。
周却是通过方绪发来的邮件得知这个结果的。邮件的标题是"审计结论出来了",正文里附了一段简短的说明:"审计组确认抽奖系统输出结果与展示结果之间存在差异,差异原因定性为'人为操作失误',未认定存在主观恶意。行政部相关责任人被处以内部通报批评和绩效扣减。没有任何人涉及到法律层面的追责。"
周却把那封邮件读了两遍,然后把手机放在了桌面上。盛恒的办公室下午三点的光线从北面的窗户照进来,带着冬日特有的那种偏冷的白色调。他坐在办公桌前,手放在桌面上,指腹贴着电脑键盘的边缘,保持着一个没有打字的姿势。
他站起来走到窗边。窗外的居民区屋顶上覆盖着一层薄薄的霜,在午后的光线下泛着细碎的反光。远处的地平线上有一排光秃秃的树,枝丫在灰白色的天空里铺展开来,像是用炭笔画上去的线条。
他在窗边站了一会儿,然后走回办公桌前坐下来,拿起手机给方绪回了一条消息:"收到。"
方绪没有回复。
那天下午下班之后周却比平时晚走了一会儿。他在工位上把当天的工作做了收尾,把接口状态日志复核了一遍,然后关了电脑。站起来的时候他看了一眼窗外——天色已经暗了,居民区屋顶上的霜在路灯下变成了一层灰色的轮廓,看不清楚了。
他拿起外套走出了办公室。
楼下的街道上风比白天大了一些,他走在人行道上的时候外套下摆被风掀了一下,他用手按住了,继续往前走。经过十字路口的时候他习惯性地抬头看了一眼对面那栋灰色的写字楼——楼上的灯亮着很多,一层一层的,像是垂直排列的光点。
他在路口停了一下,站在风里看了几秒那栋楼,然后走过了斑马线。
公交站台上等车的人比平时少一些。他在长椅上坐下来,把手放进了外套口袋里。口袋里有一张旧名片,是他最早入职锦程科技时印的第一版,已经放了很久了,边缘有些磨损。他没有把名片拿出来,手指在名片表面碰了一下就移开了。
公交车来了。他上了车,坐在靠窗的位置。车子启动之后窗外的街景开始移动,路灯的光在玻璃上一道一道地划过,明暗交替着。
他靠着座椅,安静地坐着。
第八章. 续约
一月下旬,盛恒的供应商接口项目进入了第二阶段。
第一阶段的模块已经稳定运行了将近两个月,数据流通顺畅,没有出现大的偏差。周却在第二阶段的规划里加入了供应商报价的自动比对功能——在数据通过接口流入的同时,系统会自动参照历史报价和市场基准做一个波动区间标记,如果偏离超过阈值就触发人工复核提醒。
技术团队对这个模块的反应是积极的。对接人在会议室里看到流程图的时候说了一句"这个功能如果早半年上线,采购部那边能少跑不少手工比对"。
周却把这个模块的开发排期排进了二月第一周。
与此同时,盛恒有几家核心供应商的框架进入了续约窗口期。陈铮在内部系统里发了一封通知,让各相关部门在续约之前完成一次数据核查,确认现行框架的执行状态和续约条件。周却所在的部门负责提供供应商接口端的履约数据汇总。
他花了一天半的时间把过去三个月的接口数据做了统计,把各家供应商的按时交付率、质量抽检合格率、以及报价波动区间的实际分布整理成了一份简洁的汇总表。他把汇总表发给了采购端的对接人,在邮件末尾加了一句"有需要补充的字段随时告诉我"。
采购端那边回复了一封简短的邮件:"数据够了。"
那天下午周却去楼下买了杯咖啡,站在盛恒一楼大堂的落地窗前面喝了几口。窗外的街道上有人在遛狗,一个年轻女人牵着一条黑色的拉布拉多沿着人行道慢慢地走着,狗在某棵树下停下来嗅了一会儿,女人站在旁边等着。
他看着那一幕看了几秒,然后端着咖啡杯转身走向了电梯间。
电梯上行的时候他从口袋里掏出手机,看到了一条来自方绪的新消息。消息的内容很短,只有一行字:"锦程今年的供应商框架启动了,换了新的负责人。听说推进节奏不太顺。"
周却看着那行字,电梯在六楼停了一下门开了,外面没有人,他按了关门键继续上行。到了十八楼他走出电梯,把手机放回了口袋里。
他走回办公室坐下来,打开电脑,继续做接口模块的排期表。排期表上二月第一周的那一行他已经填好了"自动比对模块开发",现在他在那行后面加了一个时间节点:"预计二月第三周完成首轮测试"。
窗外的日光已经偏西了,从百叶窗的缝隙里渗进来在桌面上形成细长的光带。他把排期表保存了,然后靠进椅背里,手放在桌面上,手指自然地垂着。
办公室里的空调送风口发出持续的轻微嗡鸣,这个声音他已经听了将近三个月了。刚开始的时候还觉得有些陌生,现在已经变成了环境的一部分,跟键盘的敲击声和走廊里偶尔的脚步声混在一起,组成了一种平稳的背景音。
他安静地坐了一会儿,然后把手放回键盘上,打开了下一份文档。
第九章. 窗口
二月底,盛恒的供应商接口自动比对模块完成了第一轮测试。
技术团队在内部系统里贴了一份测试报告,报告里写了模块在模拟环境中的运行结果——偏差识别准确率百分之九十六,误报率低于百分之三。技术对接人在报告末尾备注了一行字:"建议下周接入生产环境试运行。"
周却在系统里看到了那份报告,他做了一次复核,把测试数据重新跑了一遍,确认数字准确。然后他给技术团队回了一个"可以接入生产环境"的确认。
生产环境接入之后的前三天他每天都会在上午和下午各查看一次模块的输出结果,确认没有异常。前三天一切正常,第四天的时候系统弹出了一条偏差提醒——某一家供应商的报价比历史基准高出了百分之十一,超过了阈值上限。
他把那条提醒点开详细看了看。供应商的编号他认识,是去年在整理旧数据时他在笔记本上记过的那一家——跟盛恒的框架续约价格比市场均价低了不少的那家。这次系统提醒的是这家供应商的报价出现了反向偏差,比历史基准高了百分之十一。
他把这条提醒转给了采购端的同事,在备注栏里附了一行字:"该供应商历史报价偏低,本次偏离幅度较大,建议核实报价依据。"
采购端的同事第二天回复了一封邮件:"已核实。该供应商反馈报价上调的原因为原材料采购成本增加。我们正在评估替代方案。"
周却把那封邮件读完,关闭了窗口。
那周晚些时候,他在盛恒的系统里看到了采购端更新的一份供应商框架状态表。表中显示那家供应商的状态从"框架执行中"变成了"框架评估中"。评估结果的预计完成时间标注在备注栏里,是两周后。
他把那份状态表看完了,没有做任何操作。
三月的第一个周末,周却去了一趟城郊的河边。河堤上的柳树已经开始返青了,枝条上冒出了细小的嫩绿色芽点。他沿着河堤走了一段路,在一棵柳树下面站了一会儿。河面上风不大,水波微澜,阳光落在水面上碎成一片细密的亮光。
他站在那里看着河面,风从侧面吹过来把他外套的领口掀动了一下。他抬手把领口按平了,然后继续沿着河堤往前走了一段,在步道尽头折返回来。
走回河堤起点的时候他在长椅上坐了一会儿。手机放在旁边的椅面上,屏幕一直暗着。不远处有一家人带着小孩在放风筝,那只风筝飞得不算高,在半空中左右摇晃着,色彩鲜艳的尾巴在风里拖成一条弯曲的弧线。
他看了一会儿那只风筝,然后站起来沿着河堤走了回去,在一棵柳树旁边停了一下,又继续往前走了。
第十章. 街道
三月底,盛恒供应商接口项目的主体部分基本完成了。
自动比对模块已经在生产环境上平稳运行了将近四周,识别出来的偏差提醒都在采购端的正常处理流程范围内。技术团队在系统里贴了一份运行状态报告,把各项运行指标标了绿。周却在报告上扫了一眼确认数据无误,然后离开了那个页面。
那天下午他坐在办公室里翻看下一阶段的规划文档。文档的标题是"供应商数据全链路优化方案",里面列了几个方向的改善建议,包括接口响应速度的进一步优化和数据存储结构的精简。他在文档末尾加了一行备注:"建议纳入二季度工作规划。"
发完文档之后他站起来走到窗边。窗外居民区屋顶上的霜已经融化了,银杏树的枝丫上开始出现极细小的芽点,在午后的光线下泛着一层浅褐色的光泽。远处的天际线清晰而舒展,几朵薄云在天空中缓慢地移动着。
他站在窗边看了一会儿,然后转身走回办公桌前坐下来,把电脑合上了。
那天傍晚他比平时早走了一些。走到楼下大堂的时候看到了陈铮从侧门进来,两人在门口碰了一下。陈铮看了他一眼,说了一句"接口项目做完了?"
"主体部分做完了。后续优化纳入二季度计划。"
陈铮点了点头,朝电梯间方向走了。周却推开门走出了大堂。外面的风比冬天的时候柔和了许多,三月底的傍晚天色还亮着,淡蓝色的天幕上挂着几缕浅色的云。
他沿着街道往公交站的方向走着,经过十字路口的时候习惯性地抬头看了一眼对面那栋灰色的写字楼。楼上的窗户亮着许多灯,在傍晚的天色里它们比白天的时候更明显一些,像是一排排亮起来的格子嵌在灰蓝色的背景上。
他看了几秒,然后低头走过斑马线。走到路中间的时候他的脚步放慢了半拍,但最终没有停下来,继续走过了整条斑马线,在街对面的人行道上落地。
他在人行道上站了片刻,把外套的拉链拉上了一些,然后转身沿着街道继续往前走。
街道两侧的路灯正在陆续亮起来,从远处的街角开始一盏一盏地依次亮起来,像是一条光在沿着街道缓慢地流动着。他走在人行道上,影子在他前面和后面交替着变化长度,随着路灯的间距而在明暗之间反复切换。
他走到公交站台的时候在长椅上坐下来。公交车还有几分钟才到,他坐着等了一会儿,双手放在外套口袋里,目光落在站台对面那一排新叶初绽的树上。树叶在傍晚的风里轻轻翻动着,露出叶背浅色的那面,在路灯的光里一闪一闪的。
公交车从远处驶过来了。他站起来,走到站台边缘等着车门打开。车门开的时候暖风从车厢里涌出来,裹着车载暖气和织物座椅混合的气味。他迈步上了车,刷卡,在靠窗的位置坐下来。
车子开动之后窗外的街景开始向后移动。路灯、店铺招牌、行人、行道树,所有的轮廓都在暮色和灯光中融合成流动的、连续的画面。他靠着车窗坐着,把视线放在窗外不断变化的风景上。
公交车驶过了三个路口之后,在一个站台停了一下,有人下车有人上车。车子重新启动的时候他感到口袋里的手机轻轻震了一下。他把它掏出来看了一眼屏幕。
是一条通知——盛恒的系统里自动生成了一条对接状态日志更新,日志记录显示某一家供应商的框架评估流程已经完成了,评估结果为续约条件已达成。
他看到那个供应商编号的一瞬间认出了它。正是去年他花了一天半整理数据时在笔记本上记下的那家,也是后来系统弹出过偏差提醒的那家。状态栏里标注了"续约条件已达成"。
他把那行通知读完了,然后把手机锁屏放回了口袋里。
窗外的街道还在继续向后移动着,天边的最后一抹光正在暗下去,路灯的光在夜色中变得更加清晰和稳定。他靠着车窗,安静地看着窗外移动的风景。
车子到站的时候他站起来下了车。夜风从街道对面吹过来,带着三月末特有的那种清润的凉意。他站在站台上呼吸了一口空气,然后把外套裹紧了一些,沿着街道往公寓的方向走。
街边的树在风里轻轻地摇动着新叶,路灯把树的影子投在地面上,在微风中微微晃动着。他走过那些晃动的影子,走进了公寓楼的门口。
楼道里的声控灯随着他的脚步声亮了起来,在他走上去之后又在他的身后依次熄灭了。他走到自己那层,掏出钥匙开了门,屋里涌出来的暗色里带着安静的、熟悉的空气。
他进屋之后关上了门。门锁发出咔嗒一声轻响,楼道里的声控灯在几秒之后也熄灭了。
屋里的灯光暖黄而均匀。他站在玄关处换鞋,把外套挂上衣架,然后走进了客厅。
窗外是这座城市三月底的夜色,远处亮着密集的灯光,在黑暗中如同一片散落的光点。他站在窗边看了一会儿那片夜景,然后转身走回了屋里。
他把客厅的灯调暗了一些,然后坐在了书桌前。
窗外的夜景安静地亮着。
【全文完】
创作声明:本文部分内容AI辅助整理,全文人工修改核实,本故事纯属虚构。
热门跟贴