很多系统真正走向失败的那一天,并不是:
- 服务挂了
- 数据丢了
- 用户进不来
而是某一天,你意识到:
“这个系统已经没人敢改了。”
但奇怪的是,它还在跑。
一、一个真实但常被忽略的瞬间
你一定经历过这种场景:
PM 说:
“这个需求其实很小,就加个判断。”
你点开代码,看了 10 分钟,然后说了一句:
“我得先看看这块有没有别的影响。”
又过了 20 分钟,你发现:
- 这个判断涉及 3 个状态
- 这 3 个状态来自 2 张表
- 其中 1 张表的字段含义在不同地方不一致
- 有个定时任务在凌晨会偷偷改这个状态
- 还有个 MQ 消费者在失败时会重试并回滚
这时候你突然意识到一件事:
问题不在于需求小不小,而在于系统已经不允许你“小改”。
二、“还能跑”的系统,往往最危险
系统的衰败有一个极其隐蔽的阶段:
功能全部可用,但任何改动都会产生不可预测的后果。
这个阶段的系统具有几个特征:
- 没有明显 Bug
- 没有严重性能问题
- 监控看起来一切正常
- 但所有改动都靠“老同事的经验”兜底
于是系统进入一种诡异的稳定态:
稳定 ≠ 健康
稳定 ≠ 可演进
三、为什么“它还能跑”反而会害死系统?
因为“还能跑”意味着:
-
问题不会被优先级推动
-
技术债不会被正视
-
架构问题不会被拆解
-
所有人都默认:
“先别动,风险太大”
久而久之,系统开始出现一种病态:
任何新增需求,都只能通过“补丁”实现。
而补丁最擅长做的事情只有一件:
让未来的任何改动都更困难。
四、系统真正失控的信号,不是事故,而是这些话
如果你在团队里经常听到下面这些话,要警惕:
- “这块代码不要随便动”
- “你先照着原来的方式 copy 一份”
- “之前就是这么写的”
- “现在这样也没出过事”
- “改这里可能会影响很多地方”
这些话的潜台词是:
系统已经不再由规则控制,而是由恐惧控制。
五、真正优秀的系统,反而经常“出问题”
这听起来反直觉,但是真的。
优秀系统的特征往往是:
- 小问题经常被暴露
- 非法操作立刻失败
- 不合理调用马上报错
- 隐式行为被不断清理
因为它们遵循一个原则:
让问题尽早出现,而不是让风险慢慢积累。
相比之下,“还能跑”的系统,
是在把所有问题延迟到一次无法承受的爆炸里。
六、一个判断系统是否“还能被拯救”的简单问题
你可以问自己一个问题:
如果现在让我重写这个模块,
我能不能清楚说出:
哪些行为是合法的,哪些是绝对不允许的?
如果答案是“说不清”,
那这个系统的问题,已经不是代码层面的了。