首页>后端>正文

系统重构之后,混乱为何还会回来

Feng 6 阅读 后端

第一次真切感到”周期”这东西存在,是在一屏没人愿意打开的旧代码前。

那套系统扛着很高的流量,代码库却烂得很有层次。逻辑一层压一层,改一处,另一处莫名其妙就炸。团队里没人主动认领这块地盘。

我们花了几个月拆、重写、迁。像在半空中给一架正在飞的飞机换零件——旧系统不能停,新结构得一点点把流量接过去。任何一步踩空,代价都直接落到用户头上。

上线那天,所有人松了口气。复盘会上有人画了条线,从谷底一路往上,停在白板高处。那时我也信:重构就是答案。旧的推倒,新的立起来,混乱就被永久留在了昨天。

一年半后我再看那套系统。

新需求一层层压上来,当初干净的设计开始出现缝隙。代码里重新长出临时判断、兼容分支、没人敢删的注释块。它像一间住久了的房子:刚装修完每样东西都有位置,后来有人来有人走,添家具,也堆下不知该放哪的纸箱。墙面有划痕,角落积灰,某处重新返潮。

当初一起重构的人走了大半。新来的工程师皱着眉问我:这里为什么这么设计?

我一时答不上来。当初那样设计理由充分,只是时间往前走了,需求、团队、环境全变了。昨天的正确没有变成错误,它只是回答不了今天的问题。

重构不是终点,它只是把秩序重新建立了一次。系统只要还在被使用,就会持续接纳新需求、新的人、新的妥协。每次变化都有理由,叠得够久,原本清楚的边界就重新模糊。这未必是谁做错了。

但”未必是谁做错”不等于”无从下手”。腐化有迹可循。需求侧看兼容分支的增长速度——如果每个迭代都在加 if 判断而不是删判断,说明抽象层已经跟不上业务。人员侧看隐性契约的丢失——老成员一走,那些只存在于口头和注释里的约定就失效,新人按字面理解改代码,事故随之而来。监控侧看临时补丁的固化——为救火打的补丁如果三个月没被清理,基本就长进系统里了。

这些都能量化。圈复杂度按模块做趋势对比,连续两个季度上升的模块优先处理;变更失败率和 MTTR 分开统计,前者涨说明改动风险在积累,后者涨说明故障定位变难;再配合代码库的注释密度和 TODO 存量,大致能画出这套系统当前处在曲线的哪个位置。指标不是用来考核人的,是用来决定下一次重构从哪下手。

回到当年那次重构,真正难的其实不是拆代码,是切流量。飞行途中换零件,换的顺序错了就是坠机。我们后来总结出的做法是灰度分批:先 1% 流量走新链路,双写比对两边结果,差异率归零并稳定一段时间再往上加。每一步都预先写好回滚脚本并实际演练过——没演练过的回滚脚本等于没有。判定标准要提前定死:错误率超过基线多少、P99 延迟劣化多少,触发回滚,不现场讨论。这套口径后来在别的项目上复用,救过几次场。

所以系统设计不是建成即封存的纪念碑。它更像一座有人住的城市:道路会堵,建筑会改,边缘地带会变成新中心。秩序不是完成态,是一个要反复维护的动作。重构真正做的,不是消灭混乱,是替系统重新争取一段能呼吸的时间。

后来我在别处认出了同样的轮廓。

团队从陌生到默契,再因为流动、目标变化和积累的误解生出距离。过去自然形成的配合,不会因为曾经存在就永远存在。带团队做复盘时,新同学问我:这项目开头很顺,中间怎么越来越乱?我看着他,想起那套系统。我说,不是你们做错了,是项目活到一定阶段,自然会变重。

关系如此,工作如此,人的状态也如此。有时精力充沛觉得什么都能扛,有时陷在一段说不清原因的低谷里,连熟悉的事都做得吃力。我们习惯把向上叫成长,向下叫退步。把时间拉长看,它们可能只是同一条曲线上的不同位置。

事情不会永远清晰,也不会永远混乱。很多以为彻底解决的问题会换个形式回来;很多以为回不去的状态,某天会以新样子出现。成熟也许不是找到一劳永逸的方法,而是知道重要的东西都得一遍遍重建:代码的整洁、团队的信任、关系里的理解、一个人内心的秩序。像院子里的草要反复修剪,像琴弦走过一段天气就要重新调音。

这当然累。但换个角度也让人安稳:向上的状态不会永远持续,那么向下也不必被当成最终结论。

做投资之后,我对周期有了更具体的认识。

刚接触市场时几乎每天盯盘,涨一点高兴,跌一点焦虑,情绪拴在价格后面来回摆。那时以为理解市场就是盯紧市场,看更多消息、分析更多数据,勤奋到极致就能预测下一次涨跌。

后来发现不是。波动不是一道等着被解开的题,它由无数人的预期、资金、情绪和现实共同构成。你可以研究它,没法要求它按你的理解运行。周期也不是准时转动的钟摆,没有固定长度,更不会提前告诉你今天是顶、是底,还是漫长中途里一个没有名字的位置。往往要等潮水退去,才看清它到过哪里。

所以理解周期不等于预测拐点。它只是提醒:别把眼前的位置当成世界永恒的样子。

2024 年市场低迷时我做过一件小事。把交易软件从手机首屏挪到最后一屏。不卸载,也没决定从此不看,只是让每次想打开它时多滑几下。那几下很短,却给冲动留了缓冲。很多时候滑到一半,发现自己并没有新判断,只是焦虑地想确认价格变没变,于是把手机放回桌上。

那一年做得最多的是读书。读那些总说”等有空再读”的书,读完记一点,不急着整理也不急着下结论,像往一个看不见底的瓶子里慢慢存水。后来市场回暖,回头看,那一年真正留下的不是等对了某次上涨,而是我没让一段低迷行情占据生活的全部。就算市场没立刻好转,读过的书、写下的字、收回来的注意力,也不会因此失去意义。

有些时候什么都不做不是消极。它只是承认眼下没有值得改变长期计划的新信息。不因恐惧制造动作,不因无聊增加风险,不因看不见结果就否定已经作出的选择。这也是一种行动。

但周期不是轻飘飘的乐观主义。它不承诺每只跌下去的股票都会回来,不承诺每家衰落的公司都能重新繁荣,也不承诺每个被忽略的人都会回到原位。有些系统重构完照样下线,有些企业没等到下一次景气,有些冬天结束了,站在原地的已经不是原来那批人。

周期只说明变化不会停止,没保证变化朝我们希望的方向走。所以耐心不是相信”一切迟早涨回来”,而是在无法预测方向时仍为自己保留选择。投资里是分散配置、留足现金、不用承受不起的杠杆,不让一次错误把自己永久赶出市场;工作里是继续学习、维护能力和关系,不把全部价值押在某个职位、平台或评价体系上;生活里可能只是好好吃饭、睡觉、读书,把眼前能完成的事完成。等待不是躺平等命运修复一切,是在潮水没转向时保存再次出发的能力。

耐心也不是天生的美德,更像一种关于变化的记忆。我见过系统从混乱变清晰,也见过清晰的系统重新长出复杂;见过市场在乐观悲观间摆动,也见过一个人曾经无比在意的事,几年后忽然失去重量。这些经历没让我学会预测,只是让我不再那么轻易相信当下。顺利时知道顺利不是永久,困难时也尽量不把困难看成对整个人生的判决。两种认识来自同一个地方:高处需要克制,低处需要余地。

市场里的周期能画成图表上起伏的线,落到一个人身上就没那么清楚了。

我花了很长时间才接受自己不再处于组织核心这件事。最初反复找原因,从每次会议、每个安排里判断事情是不是在好转,以为走出低谷的标志是重新被看见、被需要、被放回原位。

后来发现不是。真正的变化没发生在组织给我答案的时候,而是发生在我不再需要那个位置向自己证明价值的时候。我开始读书、写东西、重新整理时间,也重新辨认:哪些能力属于职位,哪些东西离开一套组织结构仍然属于我。那些日子从外面看像停在原地,没新头衔,没明显进展,也没有一条向上的线。可回头看,那不是停滞,是原来的坐标失效后,我在找另一种衡量自己的方式。

有些路不是靠速度走完的,要靠理解。一个人的周期走完,未必意味着回到从前的高处,更可能是有一天他终于不再用从前的高低判断今天的自己。外部世界也许没大变,但那个被困住的人已经不在原地了。

“周期”这个词,残酷也慈悲。残酷在于没有东西能永远保持原样:再好的系统会磨损,再默契的团队会变化,再安稳的生活里也会慢慢冒出新问题。慈悲也在这里:既然变化不会停止,眼前的一切就不是全部。今天的失意不会自动变成明天的好运,但它也没资格替整个人生下结论。你仍然可以调整、准备,在旧位置消失后慢慢长出另一种生活。

周期给人的安慰不是”一切都会恢复原样”,而是没有任何一种状态能永远垄断未来。

如果你正走在一个弯道里,不必急着把它解释成失败。先把眼前该做的做好:系统变乱了就重新整理,能力不够就继续学,市场波动时确认风险是否仍在承受范围内,暂时没答案就允许答案晚点出现。有些事需要行动,有些事需要修正,还有一些只能让时间从它身上经过。等待不是和时间讨价还价,是逐渐明白哪些部分可以用力,哪些必须留给季节。

很多年前重构完那套系统,我们在白板上画了一条一路向上的线。后来才知道,现实很少沿那样的直线走。它更像潮水:靠近,退去,留下痕迹,又重新回来。回来的也不是原来的潮水,岸边的形状已经变了。可正是这些往复,让新的东西被带来,也让不再属于这里的东西慢慢离开。

一切都会回潮。不是说失去的都会回来、跌下去的都会复原、过去的日子能重新拥有。而是说,时间从来不会停在今天。等潮水再次转身,岸已经变了,你也已经变了。

ID:7782

Feng
这位作者很神秘,还没有填写简介。