我以前总以为,项目上线那一刻,应该像电视里那种打完仗的镜头。
大家站起来鼓掌,谁拍我两下肩膀,说一句“辛苦了”,然后我靠在椅子上长出一口气,正式进入“老子终于熬出来了”的贤者模式。
后来我才发现,我还是太年轻了。
项目上线成功,不代表你就解放了。
很多时候,那甚至不是结束,而是监控面板刚亮起来的开始。
前一晚我还抱着小璇送我的那束花,心里热得跟刚充满电似的,觉得这段时间熬的夜、盯的日志、掉的头发,多少都值回点本。结果第二天一到公司,我那点被砂锅粥和《告白气球》养出来的浪漫情绪,立马被现实按在工位上做了个全量回滚。
办公室比平时还安静。
不是没人在说话,是那种每个人都压着声儿,连敲键盘都显得比平时重一点的安静。前端在那边盯线上页面,产品拿着手机来回看用户路径,测试还在补最后几轮观察记录。老板倒没一直站在我们后面施压,可他不来反而更吓人,因为你知道他也在看,只是没走到你脸上来问。
而我呢?
我人坐在工位上,魂已经挂在监控面板上了。
日志、接口耗时、任务成功率、状态流转、第一批用户反馈,我一个个来回切着看。看一会儿后台,看一会儿服务状态,看一会儿前端页面有没有异常,再看一眼群里有没有人突然冒出来丢一句“这里怎么不对”。
最折磨人的还不是它真报警。
是它一直没报警,你心里却总觉得它下一秒就要响。
这玩意儿特别像小时候考试发卷子之前那几分钟。老师没叫你名字,你反而更慌,因为你总觉得下一个被点到的就是自己。
项目上线后的前两个小时,基本就是这么过的。
表面看起来很平静。
主流程能跑。
页面没白。
任务能创建。
结果也能正常回。
可问题是,C 端项目这种东西,不是你自己点两遍没问题就算稳了。你得等用户真进来,等第一批真实请求跑一遍,等各种你在测试环境里根本想不到的操作自己冒出来,才能知道这锅到底炖熟了没有。
中午前后,第一波数据开始慢慢回来。
产品那边最先兴奋起来,指着后台数据说“有新增了”“有人真的在用”“第一批转化还不错”。老板也终于在群里发了句“继续盯一下,别松”。
这话看着挺普通,可一到我们这边,翻译过来差不多就是:
兄弟们,先别急着庆功,锅还在火上。
我一边盯监控,一边假装自己很稳。
其实心里还是悬着的。
那会儿最怕的不是没人用,反而是有人用得太快。因为一旦量上来,很多你原来觉得“应该没事”的小问题,就容易被真实流量狠狠干出来。
果不其然,下午一点多的时候,前端突然在群里问了一句:
“这个生成中的状态,是不是偶尔会多停几秒?”
就这一句,整个群一下就精神了。
我看到消息那一刻,脑子里第一反应不是“这肯定有问题”,而是“妈的,来了”。
产品立刻跟上:“用户能感知到吗?”
测试也冒了出来:“我这边刚刚复现了一次,不是每次都有。”
我没急着回,先把那条链路从头到尾翻了一遍。
状态回写时间。
接口返回时间。
前端轮询节奏。
模型响应时间。
几分钟里,我整个人一句废话没说,盯着屏幕看得眼睛都快发直了。旁边有人走路我都嫌他脚步重,生怕把我脑子里那条刚抓到一半的线索给踩断。
查到后面,问题其实不算大。
不是主逻辑挂了,也不是状态写错了,就是模型那边有时候响应慢一点,前端这边展示又刚好卡在那个空档,导致“生成中”会比预期多停几秒。用户真要说不至于直接骂娘,但这玩意儿特别恶心——因为它不是故障,却很容易让人产生“是不是出问题了”的怀疑。
说白了,就是那种还没到线上事故级别,但足够让你复盘会上被反复点名的小毛病。
我把结论在群里说了一遍,前端那边也马上去补展示兜底。产品听完以后,先问了一句“会不会影响转化”,我差点脱口而出一句“你现在怎么满脑子都是转化”,好在最后还是忍住了,只回了句:“先把感知降下来,别让用户误会是卡死。”
那一刻我特别清楚一件事。
项目上线以后,大家关心的是同一个东西,但站的角度完全不一样。
老板关心结果。
产品关心转化。
前端关心展示。
测试关心复现路径。
而我关心的是——这破链路到底还能不能稳住,别让大家今天晚上都睡不成觉。
好在后面那几个小时,整体算扛住了。
没有大面积异常。
没有主流程炸穿。
也没有用户突然冲进来把系统用成灵异事件。
可就算这样,我也没敢真正放松。
因为做项目做久了你就会发现,一个系统上线以后最危险的,不是第一个小时,而是你开始觉得“应该没事了”的时候。人一松,判断就会跟着松;你以为的稳,很多时候只是运气还没走完。
那天下班以后,我比前一晚项目刚上那会儿还累。
前一晚是提着一口气,现在是那口气一直没敢彻底放下,吊了一整天。回家路上我坐在地铁里,脑子里还在回放白天那几个波动点,越想越觉得这个要记一下,那个后面也得补,不然这次没翻车,下次早晚得翻。
到家以后,小璇一眼就看出来了。
她给我开门的时候先看了我两秒,然后侧身让我进来,第一句话不是“今天怎么样”,而是:
“你这表情,不像项目稳住了,像你自己快不稳了。”
我把包放下,换鞋的时候笑了下:“哪有这么夸张。”
“有。”她站在旁边看我,“你每次真没事的时候,进门都会先贫两句。像今天这种一句话都不想说的,基本就是又被工作狠狠干了一顿。”
我听完都想给她鼓掌。
这个人真的是,白天不在我工位边上,晚上回来照样能把我状态看得明明白白。好像我那些微信里没说出口的东西,脸上已经自动同步给她了。
我坐到沙发上,整个人往后一靠,终于承认了。
“今天不是出大事了。”
“嗯。”
“但就是不敢松。”我抬手按了按眉心,“上线以后盯了一天监控,哪儿抖一下都觉得要出问题。其实最后也没真炸,可人就是会一直悬着。”
小璇给我倒了杯水,递过来,坐到我旁边。
“正常。”她说,“你这不是胆小,你这是第一次真的对着用户负责。”
我愣了一下,看她。
她说这话的时候特别平静,不像安慰,反而像是在陈述一个我自己还没来得及总结出来的事实。
我低头喝了口水,慢慢点了点头。
还真是。
以前做后台、做内部系统,很多事再怎么复杂,归根到底都是在公司内部兜圈子。现在不一样了,这次项目一上,就是真用户在点、在看、在感受。你做得顺不顺,链路稳不稳,页面会不会让人烦,已经不是你自己测两遍就能决定的了。
说得难听一点,从它上线那一刻起,我写的就不是代码了,是别人会不会骂我们的体验。
小璇看我没说话,又补了一句:
“所以你现在累,不是因为今天问题特别多,是因为你终于开始知道‘稳住’这两个字有多重了。”
这句话一下把我说透了。
我靠在沙发上,忽然有点想笑。
“你怎么每次都能总结得这么准?”
“因为我不是你。”她侧头看我,语气还有点嫌弃,“你在里面的时候,只会一个劲儿往前顶。旁边的人反而更容易看出来你到底在为什么累。”
那天晚上我没再继续讲太多工作细节。
不是不想讲,是讲到这儿就够了。很多东西其实没必要说得像复盘文档那么清楚,尤其是回到家以后。你只要知道,今天扛住了,心里还悬着,旁边有人看明白了,这就够把一整天那个发紧的状态松掉不少。
真正的复盘,是第二天开始的。
老板拉了个会,说这次上线整体还行,先别急着夸,大家把能看到的问题都整理一下,趁着印象还热,赶紧复一遍。
这话我爱听。
因为我最怕那种项目一上线没炸,所有人立马开始沉浸式庆功,仿佛昨天那些险险擦过去的坑都不存在了。那种项目最危险,危险就危险在大家会误以为“没出事”等于“没问题”。
复盘会开得比我想的真实。
没有人拍桌子,也没有谁被按头骂。产品说了用户路径上还有哪几步能更顺,前端说了状态展示哪里可以再兜住一点,测试把几个边角场景重新拎了出来,我这边则把链路上那些“这次只是运气好,下一次不一定还这么好”的地方,全都记了下来。
越记我越清醒。
有些地方确实是我们做对了。
有些地方只是没那么多人同时踩。
还有些地方,说白了就是这次用户量还不够大,老天爷懒得跟我们计较。
这玩意儿不能骗自己。
项目上线能跑通,说明你能把活顶下来;可项目复盘要是做不明白,那你下次还是得靠命。
我坐在会议室里,一边听大家讲,一边在本子上记:
- 状态展示需要更平滑的兜底
- 模型响应慢时要给前端更明确的反馈
- 关键链路的监控项还得补细
- 用户第一批真实路径里,有几个点比预想更容易停留
- 上线前检查项要再收紧,别把“应该没问题”当结论
记到后面,我自己都觉得有点好笑。
前一天晚上我还抱着那束花觉得,这项目总算是上了;结果现在一复盘,发现它不是“总算搞定了”,而是“总算有资格开始接受现实教育了”。
但奇怪的是,我心里并不沮丧。
反而有点踏实。
因为我突然觉得,自己好像真的开始有点像个负责人了。
不是那种嘴上说“这个我来兜”的负责人,也不是工位上看起来最忙的那个。是真正意义上,你得盯住上线,扛住观察期,敢在复盘会上承认哪些地方没做好,还得把这些没做好的东西一个个列出来,准备下次补掉的人。
以前是别人告诉我哪里有问题。
现在是我得自己先把问题找出来。
这中间的区别,其实挺大。
会开完以后,我拿着那页密密麻麻的笔记回到工位上,盯着看了好一会儿。
说一点成就感都没有,那肯定是假话。毕竟项目是真的上了,用户也是真的用了,这说明我这段时间没白熬。可与此同时,我又特别清楚地知道——这还远远不够。
能把项目送上路,只能说明你敢开车。
能不能把路上的坑都记下来,下次不再压过去,才决定你是不是开始真会开了。
我把那页纸折起来夹进本子里,心里慢慢冒出一个特别踏实的念头。
项目上线那一刻,我觉得自己像打完了一仗。
复盘做完以后,我才知道——
那不过是我学着当负责人之后,真正意义上的第一堂课。