第3章 谁在救系统
程野第一次意识到星河项目是个烂摊子,是在进组的第二周。
那天晚上十一点半,客户线上系统突然报警,会员积分兑换接口延迟飙升,订单页刷新不出权益信息。周启明在项目群里发了一个语音,背景里有酒局的喧哗声。
“程野,你先看一下,应该不是什么大问题。客户那边问起来,就说我们已经在处理。”
他说得轻描淡写,仿佛报警只是系统偶尔打了个喷嚏。
程野却在日志里看到一串密密麻麻的异常。老版本留下的积分规则没有清理,新规则又叠了一层,缓存穿透后直接打到数据库,几万条请求像潮水一样涌进去,慢一点就会把整套会员系统拖死。
那一晚,他从十一点半查到凌晨四点,唐骁陪他改前端兜底页,运维那边远程扩容,客户技术群里消息一条接一条。苏棠第一次给他打电话时,声音还算克制,只是语速明显比白天快。
“程工,我们客服那边已经接到投诉了。你能不能给我一个准确判断,是短时间波动,还是架构问题?”
程野看着屏幕上的监控曲线,揉了揉发胀的太阳穴。
“不是短时间波动,是历史规则叠加导致的链路问题。今晚我先做限流和缓存隔离,保证用户端恢复。根因修复需要拆规则表,至少三天。”
电话那头沉默了两秒。
大概是因为过去几个供应商遇到问题时,总喜欢先说“网络波动”“数据异常”“正在排查”,很少有人在第一时间把坏消息讲清楚。
苏棠再开口时,语气反倒稳了些:“好,我去跟老板解释。你需要什么支持,直接告诉我。”
从那天起,程野就知道,这个项目不能按普通外包项目做。
星河零售的会员系统承载着几百万用户,前几年被不同团队改过很多次,表面上能跑,底下却像一堆随时会塌的旧木架。接口命名混乱,核心模块没有完整文档,连促销规则都散落在几张历史表里。周启明接项目时承诺三个月完成升级,真正进场后才发现,三个月只够把坑数清楚。
可周启明不管这些。
他只关心客户会议上的说法够不够漂亮,进度表能不能按时发出去,尾款什么时候回。每次项目内部提出风险,他都会先皱眉,随后用那套熟练的话压下来。
“客户不想听困难,只想看结果。”
“能不能先绕过去?别什么都讲重构。”
“程野,你能力强,这块你辛苦一下。”
辛苦一下,后来变成了无数个凌晨。
程野在公司折叠床上睡过,在出租车后座眯过十几分钟,也在便利店的窗边吃过冷掉的饭团。最严重的一次,是星河大促前压测失败,系统吞吐量只有合同要求的一半。客户技术总监在会议室里把报告拍在桌上,问周启明到底有没有能力做。
周启明那天西装穿得很挺,却答不上来。
他只会说:“我们团队已经在优化。”
对方冷笑:“优化哪里?瓶颈在哪?你们有明确方案吗?”
会议室里安静得让人难堪。
程野把电脑转过去,打开压测报告和链路分析图,从网关层、缓存层、数据库索引一路讲到促销规则引擎。他讲得不快,却每一句都有依据。苏棠坐在客户方那一侧,原本紧绷的肩膀一点点放松下来,最后低头在本子上记了几行字。
那次会议后,星河没有换供应商。
周启明走出会议室时拍了拍程野的肩,低声说:“今天表现不错,回头给你记一功。”
那句“记一功”,最后大概也被记进了三千块购物卡里。
辞职邮件发出去后的第二天,程野开始整理交接文档。
他没有故意留坑,也没有带走公司的代码。相反,他把系统架构、风险点、未完成事项、历史故障和处理建议全部写得清清楚楚。唐骁坐在旁边看了半天,终于忍不住把椅子滑过来。
“野哥,你真打算把这些都交出去?换我就留一手,让他们知道谁才是爹。”
程野敲完最后一行说明,保存文档。
“留坑没意义。系统是客户在用,出事的是用户,不是周启明一个人。”
唐骁啧了一声:“你就是太讲规矩,所以才被他欺负。”
程野没有反驳。
他知道唐骁说得不完全错。过去很长一段时间,他确实相信只要事情做好,总会被看见。可现在他明白,被看见和被承认是两回事。客户看得见,老板也看得见,只是后者选择装作看不见。
中午时,苏棠给他发来消息。
“听说你辞职了?”
程野看着屏幕,回道:“嗯,准备交接。”
苏棠很快回复:“因为奖金?”
程野没有立刻打字。他不想把公司内部的难堪摊给客户,也不想显得像个抱怨前东家的人。过了一会儿,他只回了一句:“原因比较多。”
苏棠那边显示正在输入,停了很久。
最后,她发来一段话。
“站在客户角度,我只说事实。这个项目能撑到验收,核心原因是你一直在处理真正的问题。周总在会上讲得漂亮,但我们技术部知道,系统是谁救回来的。”
程野盯着那段话,心口那点沉了几天的东西,终于松动了一些。
有些认可来得迟,也未必能换成钱,可至少证明他不是一个人在黑暗里白熬。
下午三点,周启明把程野叫进会议室。
里面坐着许曼、人事,还有临时被拉来接手星河二期的两个年轻工程师。桌上摆着程野刚打印出来的交接文档,厚厚一摞,边角整齐。
周启明翻了几页,脸色不太好看。
“这些风险点,你以前怎么没重点强调?”
程野看着他:“项目周报里每周都有,风险邮件也发过。第七页有记录。”
周启明动作一顿。
许曼拿过文档,扫了一眼,眉心也皱起来。那些记录清清楚楚写着发送时间、抄送人员和处理建议,其中好几封邮件,周启明确实回复过“先按当前方案推进”。
会议室里的气氛变得有些僵。
人事轻咳一声,试图缓和:“程野,交接期还有一个月,公司希望你保持职业态度,协助新人熟悉项目。”
“我会按规定交接。”程野说。
周启明看着他,声音沉了沉:“星河二期很重要,不管你个人有什么情绪,别影响公司项目。你要明白,客户资源是公司的,不允许私下接触。”
程野抬眼,第一次在这场离职谈话里笑了一下。
“周总放心,我不会拿公司的东西。”
他停顿半秒,又补了一句:“但我的经验、人脉和判断,不在公司资产清单里。”
会议室里没人接话。
窗外天色阴下来,玻璃映出几个人模糊的脸。周启明坐在桌子对面,眼神压得很低,像是在重新评估这个即将离开的员工还能给公司带来多少麻烦。
程野收起自己的电脑,推开椅子站起身。
走出会议室时,他的手机震了一下。
苏棠又发来一条消息。
“如果以后你还做技术服务,可以告诉我一声。星河这边,可能还会需要真正能解决问题的人。”
程野停在走廊尽头,看着那句话,窗外的云层压得很低,城市像被一场雨笼住。
他没有立刻回复。
但他知道,有些路已经在眼前铺开了
那天晚上十一点半,客户线上系统突然报警,会员积分兑换接口延迟飙升,订单页刷新不出权益信息。周启明在项目群里发了一个语音,背景里有酒局的喧哗声。
“程野,你先看一下,应该不是什么大问题。客户那边问起来,就说我们已经在处理。”
他说得轻描淡写,仿佛报警只是系统偶尔打了个喷嚏。
程野却在日志里看到一串密密麻麻的异常。老版本留下的积分规则没有清理,新规则又叠了一层,缓存穿透后直接打到数据库,几万条请求像潮水一样涌进去,慢一点就会把整套会员系统拖死。
那一晚,他从十一点半查到凌晨四点,唐骁陪他改前端兜底页,运维那边远程扩容,客户技术群里消息一条接一条。苏棠第一次给他打电话时,声音还算克制,只是语速明显比白天快。
“程工,我们客服那边已经接到投诉了。你能不能给我一个准确判断,是短时间波动,还是架构问题?”
程野看着屏幕上的监控曲线,揉了揉发胀的太阳穴。
“不是短时间波动,是历史规则叠加导致的链路问题。今晚我先做限流和缓存隔离,保证用户端恢复。根因修复需要拆规则表,至少三天。”
电话那头沉默了两秒。
大概是因为过去几个供应商遇到问题时,总喜欢先说“网络波动”“数据异常”“正在排查”,很少有人在第一时间把坏消息讲清楚。
苏棠再开口时,语气反倒稳了些:“好,我去跟老板解释。你需要什么支持,直接告诉我。”
从那天起,程野就知道,这个项目不能按普通外包项目做。
星河零售的会员系统承载着几百万用户,前几年被不同团队改过很多次,表面上能跑,底下却像一堆随时会塌的旧木架。接口命名混乱,核心模块没有完整文档,连促销规则都散落在几张历史表里。周启明接项目时承诺三个月完成升级,真正进场后才发现,三个月只够把坑数清楚。
可周启明不管这些。
他只关心客户会议上的说法够不够漂亮,进度表能不能按时发出去,尾款什么时候回。每次项目内部提出风险,他都会先皱眉,随后用那套熟练的话压下来。
“客户不想听困难,只想看结果。”
“能不能先绕过去?别什么都讲重构。”
“程野,你能力强,这块你辛苦一下。”
辛苦一下,后来变成了无数个凌晨。
程野在公司折叠床上睡过,在出租车后座眯过十几分钟,也在便利店的窗边吃过冷掉的饭团。最严重的一次,是星河大促前压测失败,系统吞吐量只有合同要求的一半。客户技术总监在会议室里把报告拍在桌上,问周启明到底有没有能力做。
周启明那天西装穿得很挺,却答不上来。
他只会说:“我们团队已经在优化。”
对方冷笑:“优化哪里?瓶颈在哪?你们有明确方案吗?”
会议室里安静得让人难堪。
程野把电脑转过去,打开压测报告和链路分析图,从网关层、缓存层、数据库索引一路讲到促销规则引擎。他讲得不快,却每一句都有依据。苏棠坐在客户方那一侧,原本紧绷的肩膀一点点放松下来,最后低头在本子上记了几行字。
那次会议后,星河没有换供应商。
周启明走出会议室时拍了拍程野的肩,低声说:“今天表现不错,回头给你记一功。”
那句“记一功”,最后大概也被记进了三千块购物卡里。
辞职邮件发出去后的第二天,程野开始整理交接文档。
他没有故意留坑,也没有带走公司的代码。相反,他把系统架构、风险点、未完成事项、历史故障和处理建议全部写得清清楚楚。唐骁坐在旁边看了半天,终于忍不住把椅子滑过来。
“野哥,你真打算把这些都交出去?换我就留一手,让他们知道谁才是爹。”
程野敲完最后一行说明,保存文档。
“留坑没意义。系统是客户在用,出事的是用户,不是周启明一个人。”
唐骁啧了一声:“你就是太讲规矩,所以才被他欺负。”
程野没有反驳。
他知道唐骁说得不完全错。过去很长一段时间,他确实相信只要事情做好,总会被看见。可现在他明白,被看见和被承认是两回事。客户看得见,老板也看得见,只是后者选择装作看不见。
中午时,苏棠给他发来消息。
“听说你辞职了?”
程野看着屏幕,回道:“嗯,准备交接。”
苏棠很快回复:“因为奖金?”
程野没有立刻打字。他不想把公司内部的难堪摊给客户,也不想显得像个抱怨前东家的人。过了一会儿,他只回了一句:“原因比较多。”
苏棠那边显示正在输入,停了很久。
最后,她发来一段话。
“站在客户角度,我只说事实。这个项目能撑到验收,核心原因是你一直在处理真正的问题。周总在会上讲得漂亮,但我们技术部知道,系统是谁救回来的。”
程野盯着那段话,心口那点沉了几天的东西,终于松动了一些。
有些认可来得迟,也未必能换成钱,可至少证明他不是一个人在黑暗里白熬。
下午三点,周启明把程野叫进会议室。
里面坐着许曼、人事,还有临时被拉来接手星河二期的两个年轻工程师。桌上摆着程野刚打印出来的交接文档,厚厚一摞,边角整齐。
周启明翻了几页,脸色不太好看。
“这些风险点,你以前怎么没重点强调?”
程野看着他:“项目周报里每周都有,风险邮件也发过。第七页有记录。”
周启明动作一顿。
许曼拿过文档,扫了一眼,眉心也皱起来。那些记录清清楚楚写着发送时间、抄送人员和处理建议,其中好几封邮件,周启明确实回复过“先按当前方案推进”。
会议室里的气氛变得有些僵。
人事轻咳一声,试图缓和:“程野,交接期还有一个月,公司希望你保持职业态度,协助新人熟悉项目。”
“我会按规定交接。”程野说。
周启明看着他,声音沉了沉:“星河二期很重要,不管你个人有什么情绪,别影响公司项目。你要明白,客户资源是公司的,不允许私下接触。”
程野抬眼,第一次在这场离职谈话里笑了一下。
“周总放心,我不会拿公司的东西。”
他停顿半秒,又补了一句:“但我的经验、人脉和判断,不在公司资产清单里。”
会议室里没人接话。
窗外天色阴下来,玻璃映出几个人模糊的脸。周启明坐在桌子对面,眼神压得很低,像是在重新评估这个即将离开的员工还能给公司带来多少麻烦。
程野收起自己的电脑,推开椅子站起身。
走出会议室时,他的手机震了一下。
苏棠又发来一条消息。
“如果以后你还做技术服务,可以告诉我一声。星河这边,可能还会需要真正能解决问题的人。”
程野停在走廊尽头,看着那句话,窗外的云层压得很低,城市像被一场雨笼住。
他没有立刻回复。
但他知道,有些路已经在眼前铺开了