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

我自己的一笔人生技术债:一段拖了很久没还的账

有些事情,我们不是不知道应该做。

恰恰相反。

我们知道得太清楚了。

知道应该早点处理,知道拖下去会越来越麻烦,知道它已经开始影响生活,甚至也知道解决它并没有想象中那么困难。

但就是一直没有动手。

一拖再拖。

最后,这件事情慢慢从“待办事项”,变成了生活的一部分。

我以前很少把这种状态叫作“技术债”。

后来我越来越觉得,它其实和软件系统里的技术债非常像。

代码可以先写一个临时方案。

架构可以先不重构。

测试可以先补一补。

文档可以以后再写。

只要系统还能跑,就很容易告诉自己:

“现在没必要动。”

人生也是一样。

只要日子还能正常运行,我们就很容易把那些没有解决的问题放到后台。

直到有一天,我突然发现:

原来我一直以为自己是在维持系统稳定,其实只是在不断推迟一次迟早要发生的重构。


有一笔账,我拖了很久

我现在越来越能够理解,为什么有些事情会拖这么久。

并不是因为它特别难。

很多时候,恰恰是因为它“不够紧急”。

工作上的事情,有明确的截止时间。

孩子的事情,有明确的时间节点。

客户的问题,有明确的反馈。

线上系统出了故障,更不用说。

但有些属于自己的事情,没有人催你。

没有 SLA。

没有告警。

没有负责人。

甚至没有一个明确的失败时间点。

于是它就一直待在那里。

今天不做,没关系。

明天不做,也没关系。

这个星期不做,好像也没关系。

于是一个星期变成一个月。

一个月变成一年。

最后甚至变成:

“这件事情我已经想了很久了。”

我后来发现,“想了很久”和“做了很久”,其实是完全不同的两回事。

有些事情,我以为自己已经思考得很深入。

但如果从结果来看,我只是把同一个问题在脑子里运行了很多遍。

输入没有变化。

代码没有变化。

输出当然也没有变化。


技术债最可怕的地方,不是它存在

做技术的人应该都知道。

技术债本身并不可怕。

真正可怕的是:

你开始习惯它。

一个临时方案用了三个月。

一个本来只应该存在几天的脚本,运行了几年。

一个没人敢动的老模块,最后变成了系统核心依赖。

一开始大家都知道它不合理。

后来大家开始绕着它写代码。

再后来,新人加入以后,甚至不知道为什么这里不能改。

于是技术债完成了一个很危险的过程:

从“异常”,变成了“现状”。

我觉得人生里的很多问题也是这样。

刚开始的时候,你很清楚:

“这里不太对。”

“我应该处理一下。”

“这种状态不能一直继续。”

但时间久了以后,你开始为它建立新的习惯。

为了适应一个问题,再增加一个 workaround。

为了躲避一个选择,再调整一下生活。

为了不面对某种不舒服,再把时间填满。

慢慢地,你甚至不再觉得这是一个问题。

你只是觉得:

“我的生活就是这样。”

这句话其实很危险。

因为它意味着:

你已经把一个需要解决的问题,写进了自己的默认配置。


我以前很容易把“忙”当成合理的解释

有一段时间,我经常觉得自己很忙。

工作很多。

事情很多。

家庭有很多事情需要处理。

还有很多想做的东西。

所以有些事情没有做,也很容易解释:

“最近确实没时间。”

这句话本身可能是真的。

但问题是:

如果一个事情连续几年都没有时间做,那它到底是真的没有时间,还是根本没有进入我的优先级?

这是两个完全不同的问题。

程序员很容易理解这一点。

一个任务如果永远排在 backlog 里,而且从来没有进入 sprint,它当然永远不会完成。

不是因为它没有价值。

而是因为系统从来没有给它分配资源。

我后来开始重新审视自己的时间。

发现很多时候,并不是我没有时间。

而是我的时间已经被那些“默认会发生的事情”占满了。

工作。

消息。

会议。

刷手机。

处理各种临时问题。

别人提出的需求。

各种看起来很紧急的小事情。

它们不断占用 CPU。

而真正重要、但没有立即反馈的事情,只能一直排队。

于是我开始意识到:

人生技术债,有时候不是能力问题,而是资源调度问题。


更麻烦的是:技术债会产生利息

以前我理解的技术债,是“以后要花更多时间重构”。

现在我觉得这个理解还不够。

人生里的技术债,真正昂贵的地方,是它会产生利息。

一件拖了很久没有解决的事情,成本并不会保持不变。

它可能会影响另外一件事情。

另外一件事情又影响第三件事情。

最后形成一条依赖链。

比如一个本来应该早点做的决定,因为迟迟没有决定,于是产生了焦虑。

焦虑让自己不断寻找更多信息。

信息越来越多,选择越来越复杂。

选择越复杂,越不敢做决定。

最后又回到原来的焦虑。

这其实已经不是一个问题了。

而是一组相互依赖的问题。

软件系统里面,一个小模块的技术债,可能最后扩散到整个架构。

人生也是一样。

一个长期不处理的问题,最终可能会变成一种生活方式。

这才是我现在觉得最值得警惕的地方。


我开始重新给自己的“账”分类

以前面对那些一直拖着的事情,我通常只有一种处理方式:

记住它。

但“记住”其实不是管理。

一个问题如果只是存在脑子里,它就会不断占用注意力。

你可能没有在处理它。

但它一直在后台运行。

所以最近我开始尝试做一件很简单的事情:

把那些长期拖着的事情真正写下来。

不是写成愿望。

也不是写成“以后有时间再做”。

而是把它们当成一笔笔技术债。

我开始问自己几个问题:

这笔债是什么?

我为什么一直没有还?

它现在每个月产生多少利息?

如果继续拖一年,会发生什么?

如果真的开始还,最小的一笔还款是什么?

最后这个问题对我帮助很大。

因为以前我经常犯一个错误:

一发现问题,就想一次性解决。

想重构,就想做完整的重构。

想改变,就想彻底改变。

想建立新的生活方式,就想一次把整个系统设计好。

结果就是:

方案越来越复杂。

行动越来越困难。

最后继续拖。

现在我开始接受一个事实:

偿还技术债,不等于一次性还清。


有时候,第一笔还款只是把问题从脑子里拿出来

我以前总觉得:

真正的改变应该是一个很大的动作。

后来发现不是。

很多时候,真正重要的第一步,只是:

把它从“模糊的烦恼”,变成“明确的问题”。

因为模糊的问题很难行动。

“我的人生好像有点不对。”

这个问题没办法执行。

但:

“我有一件事情拖了两年,一直没有处理。”

就不一样了。

它开始有边界。

有时间。

有原因。

甚至可以开始拆解。

我现在越来越喜欢工程思维里的一个习惯:

先观察系统,不急着修。

先把问题记录下来。

先确认现象。

先判断影响范围。

先找到依赖关系。

然后再决定:

到底是修复。

还是重构。

还是接受它暂时存在。

人生也是如此。

不是所有技术债都必须马上清掉。

真正重要的是:

你知道自己欠了什么。


有些债,甚至不是现在才欠下的

还有一个变化,是我最近才意识到的。

很多人生技术债,并不是最近产生的。

它可能来自很多年前的一个选择。

当时那个选择也许完全合理。

甚至可能是当时最优解。

只是环境变了。

自己的阶段变了。

需求变了。

系统已经升级了。

但是当年的代码还在运行。

这其实很像一个老系统。

它当年设计的时候,没有考虑今天这么大的用户量。

所以不能简单地说:

“当初为什么这么设计?”

因为站在当时的环境里,它可能就是合理的。

所以我现在越来越少去责怪过去的自己。

过去的自己,只是在当时的约束条件下做了一个决定。

真正需要做的,是今天的我终于发现:

这段代码已经不适合现在的系统了。

那就改。

不需要羞辱旧版本。

也不需要证明当年的自己错了。

只需要承认:

版本已经变了。


我开始接受:人生不是一次性重构

这可能是我最近最大的一个变化。

以前我总觉得,人生应该找到一个正确答案。

找到方向。

找到定位。

找到最适合自己的事情。

然后坚定地执行。

但40岁以后,我越来越不相信这种“一次设计完成”的人生。

因为现实本身就在变化。

行业在变化。

技术在变化。

家庭在变化。

自己的认知也在变化。

所以人生更像一个持续运行的系统。

你不可能永远停机重构。

你只能:

一边运行。

一边监控。

一边修复。

一边升级。

一边偿还技术债。

甚至有时候,还要允许自己保留一些暂时无法解决的问题。

这不是失败。

这是现实系统的运行方式。


现在,我更关心的是:哪些债正在偷偷变贵?

我以前很容易关注“今天要做什么”。

现在开始关注另外一个问题:

哪些事情如果今天不处理,明天会更贵?

这两个问题看起来很像。

其实完全不同。

“今天要做什么”,容易被紧急程度影响。

而“什么债正在变贵”,会让我重新看到长期成本。

一个能力长期不更新,债在增加。

一个重要关系长期不维护,债在增加。

一个身体问题长期忽略,债在增加。

一个一直不敢面对的选择,债在增加。

一个一直没有开始的小项目,债也可能在增加。

甚至一个一直没有说出口的话,也可能是一笔债。

它们不一定今天爆炸。

但它们一直在产生利息。

所以我现在开始给自己留一个很简单的检查:

这个月,我有没有偿还一笔真正重要的人生技术债?

不要求清零。

甚至不要求完成。

只要开始偿还。


我不知道这笔账什么时候能还完

其实我现在依然有很多没有解决的问题。

有些问题甚至不知道最终应该怎么解决。

但和以前不一样的是:

我不再假装它们不存在。

我开始把它们写下来。

开始观察。

开始拆解。

开始偿还那些可以偿还的部分。

有些债,可以通过一次行动解决。

有些债,需要持续几个月。

有些债,可能需要重新设计整个生活系统。

还有一些债,也许最终发现:

它根本不是债。

只是过去的自己留下的一段旧代码。

真正需要做的,是决定把它删除。

我现在越来越觉得:

人生重构,并不是把过去的自己全部推倒重来。

而是终于愿意打开那个运行了很多年的系统,

看看里面到底藏着什么。

哪些代码还在正常工作。

哪些模块已经过时。

哪些问题已经拖得太久。

哪些技术债正在产生利息。

然后一点一点处理。

今天还一点。

明天再还一点。

不追求一次清零。

只是不再继续逃避。

因为我终于明白:

真正让人生变得沉重的,未必是我们欠了多少债,而是我们明明知道自己欠着,却一直假装系统没有问题。

所以现在,如果让我重新给“人生技术债”下一个定义,我可能会这样写:

人生技术债,就是那些当下可以暂时不处理,却会让未来的自己付出更高代价的问题。

而我现在要做的事情,不是逼自己立刻成为一个全新的版本。

只是开始还账。

一笔一笔。

把那些拖了很久的账,慢慢还回去。

也许这就是40岁以后,一个成年人真正意义上的“系统维护”。

不是让人生从此没有Bug。

而是终于开始认真对待那些一直存在的Bug。

我是语霖。

执笔为语,心落成霖。

继续记录,一个40岁程序员重新设计自己人生系统的过程。

下一次,继续Debug。


分享这篇文章:

上一篇
如何在职业转型期,做好新旧系统的「并行运行」
下一篇
一次真实的「人生灰度发布」,我是怎么做的