跳到主要内容
阅微漫记
返回

如何识别哪些事该「打补丁」,哪些该彻底重写

我以前特别喜欢解决问题。

准确地说,我喜欢把问题解决掉。

程序报错了。

修。

系统慢了。

优化。

需求变了。

改。

流程不合理。

补一个环节。

团队出了问题。

再加一个规则。

久而久之,我发现自己的人生也变成了这个样子。

哪里不舒服,就在那里打一个补丁。

工作不开心?

告诉自己再坚持一下。

职业没有增长?

多学一点新技术。

时间不够?

把每天安排得更满。

收入不够?

再接一点项目。

身体疲惫?

周末休息一下。

对未来焦虑?

再多做一点准备。

看起来,我一直在解决问题。

但几年以后回头看:

问题并没有真正消失。

只是被我一层又一层地盖住了。

那时候我才开始意识到:

人生里的很多问题,不是缺一个补丁。

而是这个系统本身,可能已经到了需要重构的时候。

打补丁,本身没有错

程序员都知道。

不是所有 Bug 都值得重构。

线上出现一个紧急问题。

先打补丁,让系统恢复运行。

这是非常合理的工程选择。

因为系统不能因为追求完美,就停止服务。

人生也是一样。

有些事情确实只需要一个临时方案。

最近工作特别忙。

那就调整一段时间的作息。

最近收入有波动。

那就减少一些非必要支出。

最近某个项目出现问题。

那就先解决眼前的问题。

这些都是补丁。

它们的价值在于:

先让系统活下来。

所以我现在不会再把“打补丁”理解成一种错误。

真正的问题是:

你是不是把临时方案,当成了永久架构。

有些补丁,打着打着就变成了系统

我以前最容易犯的错误就是这个。

比如工作越来越忙。

最开始,我告诉自己:

“这只是最近项目特殊。”

于是加班。

后来发现事情一直很多。

于是我开始优化时间管理。

把每天排得更满。

再后来,我开始研究各种效率工具。

任务管理。

日历。

自动化。

快捷指令。

结果几年以后,我拥有了一套越来越复杂的时间管理系统。

但有一个问题始终没有解决:

为什么我的时间永远不够?

后来我才发现。

真正的问题可能根本不是效率。

而是:

事情太多了。

有些事情根本不应该做。

有些责任不应该全部由我承担。

有些工作模式本身就不可持续。

我却一直在优化“如何更高效地承受它”。

这就是一个典型的:

架构问题,被当成了效率问题。

我自己就经历过一次这样的“重构”

那几年,我一直觉得自己的最大问题是:

时间管理能力不够。

工作忙。

项目多。

家里的事情也多。

自己的学习和写作又想继续。

于是我开始不断给自己打补丁。

买任务管理工具。

做时间规划。

每天列 Todo List。

研究 GTD。

设置日历。

尝试早起。

把工作拆成更小的任务。

甚至给自己规定:

“每天至少要完成三个最重要的事情。”

这些方法有些确实有效。

用了以后,我的执行效率提高了。

但一个问题始终没有解决:

我还是越来越累。

而且有一个很奇怪的现象。

我的效率越来越高。

但可支配时间却越来越少。

我当时甚至开始怀疑:

是不是自己还不够自律?

于是继续优化。

继续寻找更好的工具。

继续调整自己的时间表。

直到有一天,我突然意识到:

我可能一直在修一个根本不存在的 Bug。

我的问题不是:

“如何在一天里塞进更多事情?”

而是:

为什么我的一天里有这么多事情?

这个问题让我开始重新检查自己的系统。

我把过去一段时间的工作和生活全部摊开来看。

然后给每件事情重新分类:

必须做。

应该做。

可以做。

其实不用做。

结果让我有点意外。

我发现,真正必须由我完成的事情,并没有想象中那么多。

大量时间消耗在:

别人临时提出的需求。

重复性的沟通。

没有明确目标的会议。

一些已经习惯、但实际上没有太大价值的工作方式。

以及最隐蔽的一类:

因为我觉得自己应该做,所以一直在做的事情。

这时候我才发现:

我之前一直在优化“执行层”。

但真正的问题发生在“架构层”。

我不是不会管理时间。

而是:

系统里的任务数量本身就不合理。

于是我开始做第一次重构。

不是辞职。

不是彻底改变生活。

而是从减少输入开始。

能不参加的会议,就不参加。

能异步解决的事情,就不安排会议。

不重要的事情,不再追求完美。

别人可以完成的事情,不再习惯性接过来。

一些长期没有价值的活动,慢慢退出。

与此同时,我开始给自己的长期项目预留固定时间。

哪怕每周只有几个小时。

这件事情对我来说很重要。

因为以前我的逻辑是:

先把所有事情做完,再做自己的事情。

后来我才发现:

事情永远不会做完。

如果不给真正重要的事情预留资源,它永远只能排在最后。

所以我的重构,并不是突然把旧系统删除。

而是慢慢改变资源分配。

把一部分资源从“维持现状”,迁移到“构建未来”。

最明显的变化,并不是我突然变得特别高效。

而是:

我不再需要每天靠意志力,才能勉强维持生活。

这让我第一次真正理解了“重构”这两个字。

重构不是让自己变得更能扛。

而是:

让系统本身不再需要你一直硬扛。

后来再遇到类似问题,我也开始换一个思路。

以前看到问题,我第一反应是:

“怎么解决?”

现在我会先问:

“为什么这个问题需要被反复解决?”

如果答案是:

因为底层设计就是这样。

那么我就知道:

这一次,可能又到了该重构的时候。

怎么判断一个问题到底该不该重写?

后来我给自己总结了几个信号。

第一个信号:同一个问题反复出现

这是我最看重的一个指标。

如果一个问题只发生一次。

补丁通常够了。

如果同一个问题每隔一段时间就出现一次。

就应该开始检查底层原因。

比如:

反复拖延。

反复焦虑。

反复职业倦怠。

反复陷入同一种关系模式。

反复因为同一个原因和别人产生冲突。

这时候继续问:

“这次怎么解决?”

可能已经没有意义。

真正应该问的是:

为什么这个 Bug 总是被触发?

第二个信号:补丁越来越多

系统出现一个问题。

加一个规则。

又出现问题。

再加一个规则。

最后整个系统变得越来越复杂。

人生也一样。

为了维持一种生活状态,我可能需要:

严格控制时间。

不断压缩休息。

不断调整情绪。

不断说服自己。

不断提醒自己坚持。

不断寻找新的方法。

如果维持一个状态,需要越来越多的“自我管理”。

我反而会开始怀疑:

是不是这个状态本身就不值得继续维护?

健康的系统,不应该依赖大量人工干预才能运行。

如果每天都需要“用意志力修复人生”。

那可能不是执行力出了问题。

而是系统设计有问题。

第三个信号:补丁已经改变了原来的目的

这个情况其实很隐蔽。

一开始,我们做一件事情,是为了达到某个目标。

后来为了维护这个目标,我们不断增加成本。

最后发现:

维护这个目标本身,已经成为最大的负担。

比如学习。

最初学习是为了提升能力。

后来开始追求:

课程数量。

证书数量。

知识收藏。

笔记数量。

最后每天都在学习,却没有真正解决问题。

再比如工作。

最开始工作是为了创造价值并获得收入。

后来为了证明自己有价值:

开更多会。

写更多材料。

做更多汇报。

维护更多流程。

最后大量时间都消耗在证明“自己很忙”。

这时候就应该停下来重新检查:

我还在追求最初的目标吗?

如果答案是否定的。

可能就不是继续优化的问题了。

而是需要重新定义系统。

第四个信号:核心假设已经变了

这是我觉得最值得警惕的一种情况。

很多人生系统,其实建立在过去的假设上。

比如:

“只要技术足够好,就能一直获得好的职业机会。”

“只要努力工作,就会不断获得回报。”

“只要进入一家好公司,就可以稳定很多年。”

“只要把现在的事情做好,未来自然会变好。”

这些假设在某个阶段可能成立。

但环境会变化。

行业会变化。

公司会变化。

人的年龄会变化。

家庭责任会变化。

当底层假设已经变化的时候,在旧系统上不断打补丁,意义就越来越小。

因为:

不是代码有 Bug。

而是运行环境已经变了。

重写意味着什么?

以前我一想到“重写”,脑子里就会出现一个非常大的动作。

辞职。

换行业。

搬家。

重新开始。

但后来我发现:

重写不一定意味着推倒重来。

它更多意味着:

重新定义底层逻辑。

比如:

以前我的职业逻辑是:

公司需要什么,我就学习什么。

后来慢慢变成:

我真正想积累什么能力?

以前是:

有时间再做自己的事情。

后来变成:

给自己的长期项目预留固定资源。

以前是:

先把工作做好,其他以后再说。

后来变成:

工作只是人生系统的一部分。

这就是重写。

表面上生活可能没有立刻发生巨大变化。

但底层决策逻辑已经改变了。

打补丁和重写,其实可以同时存在

这是我后来才真正理解的一件事情。

现实生活里,很少存在:

“今天开始全部重写。”

更多时候是:

一边打补丁,一边重构。

当前工作还需要继续。

那就先把眼前的问题处理好。

同时开始建立新的能力。

当前收入还不能放弃。

那就维持现金流。

同时测试新的收入来源。

家庭责任还在。

那就继续承担。

同时重新设计时间结构。

这其实很像一个长期运行的系统升级。

不能停机。

所以只能:

边运行,边重构。

这可能才是40岁以后更现实的“人生重构”。

我现在会先问自己五个问题

每当遇到一个长期困扰我的问题,我会先停下来。

不急着解决。

而是问:

这是一次性故障,还是重复性故障?

如果只是偶发问题,补丁可能足够。

这个问题是不是越来越依赖人工维护?

如果每天都需要靠意志力维持,就值得重新检查。

我是不是一直在优化错误的东西?

效率越来越高,但结果没有改变,往往说明目标或者架构出了问题。

这个系统最初建立的假设,现在还成立吗?

如果环境已经改变,旧方案自然越来越难运行。

如果今天重新设计,我还会选择现在这套方式吗?

这个问题有时候最直接。

因为很多东西之所以继续存在,不是因为它仍然合理。

只是因为:

我们已经习惯了。

最危险的不是旧系统

而是舍不得旧系统。

程序员都知道。

重构最大的难点,有时候不是技术。

而是:

“现在还能跑。”

既然还能跑。

为什么要改?

人生也是一样。

工作还能做。

工资还能拿。

生活还能维持。

所以很容易告诉自己:

“先这样吧。”

但“还能运行”和“运行良好”,是两回事。

一个系统可以长期运行。

同时长期消耗资源。

长期降低效率。

长期积累技术债。

直到某一天:

维护它的成本,超过了重新设计它的成本。

那时候,重构就不再是一个理想主义选择。

而是现实需要。

写在最后

40岁以后,我越来越少问自己:

“我还能不能坚持?”

而开始问:

“这件事情值得继续维护吗?”

这两个问题看起来很像。

其实完全不同。

前一个问题默认:

系统必须继续运行。

后一个问题允许:

系统可以重新设计。

有些事情确实需要坚持。

有些困难只是人生正常的波动。

但也有一些问题:

不是努力不够。

不是执行力不够。

不是再加一个工具就能解决。

而是旧版本的设计已经不适合现在的自己。

所以现在面对一个长期问题,我不会急着给自己再打一个补丁。

我会先看看:

这个 Bug 为什么一直出现?

补丁是不是越来越多?

维护成本是不是越来越高?

当初设计这个系统的假设还成立吗?

如果今天重新开始,我还会这么设计吗?

如果答案越来越明确:

不会。

那也许真正需要做的,不是再坚持一下。

而是开始重写。

不是把过去全部否定。

而是带着过去积累的经验,重新设计下一版。

毕竟人生不是一次性交付的项目。

它是一个长期运行、不断迭代的系统。

有些 Bug,修掉就好。

有些模块,继续维护。

而有些东西,

到了该重写的时候,

就不要再用补丁,

假装它还能一直运行下去。

继续 Debug。

继续重构。

也允许自己,

在某个时刻,

重新写一遍。


分享这篇文章:

上一篇
如何设计一份属于自己的「个人技术文档」,让经验不会失传
下一篇
如何给拖延症做一次根因分析(5 Whys)