技术债务:欠债总是要还的
技术债不是“烂代码”这么简单,它是一种用未来成本换今天速度的融资行为。小明带你拆解技术债的本金与利息、如何识别与量化、什么时候可以欠、如何用制度化方式还债,避免项目被债务拖死。
16 分钟阅读
小明
技术债务:欠债总是要还的
你有没有过这种项目体验:
- 第一个月:需求飞起,功能像下饺子
- 第三个月:每次改动都要祈祷“别炸”
- 第六个月:一个小需求要改两周,大家开始互相甩锅
然后你会听到一句熟悉的总结:
这项目技术债太多了。
但“技术债”经常被用成一个万能骂人词:
- 代码难看 = 技术债
- 没时间重构 = 技术债
- 项目出 bug = 技术债
这样说没用,因为你无法行动。
今天我们把技术债讲成一件可操作的事:
- 技术债到底是什么(不是鸡汤)
- 它的“本金”和“利息”怎么理解
- 什么债可以欠,什么债千万别欠
- 怎么还:不是靠激情,是靠制度
1. 技术债到底是什么?一句话定义
最准确的定义其实很冷酷:
技术债 = 用未来的额外成本,换取今天的交付速度。
它是一种“融资行为”。
你今天走捷径,未来就要用更多时间把路修回来。
关键点:技术债不是天然坏。
- 有意识地欠债:为了抢窗口期,有计划地后续偿还(可控)
- 无意识地欠债:因为不懂/乱改/随便拼凑(失控)
你真正怕的是第二种。
2. 本金与利息:为什么债务会越滚越大?
2.1 本金:你欠下的“工程缺口”
比如:
- 没写测试
- 模块边界混乱
- 复制粘贴的逻辑没有抽象
- 过度耦合导致改一处牵一片
这些是债务本金。
2.2 利息:你每次开发都要多付的“额外成本”
利息更可怕,因为它会每天收:
- 你要花更多时间理解代码
- 你要花更多时间回归测试
- 你要花更多时间处理副作用
- 你不敢改,只能绕路 → 更大债务
技术债最阴险的一点:
你以为自己在“省时间”,其实只是把成本移到了未来,并且加了利息。
3. 技术债从哪里来?最常见的 6 个来源
- 赶进度的临时方案没回收:临时 if/开关/补丁永久化
- 复制粘贴驱动开发:逻辑散落,修 bug 修出连锁反应
- 缺失测试与边界保护:每次改动都像拆炸弹
- 过度抽象或抽象不足:要么太复杂,要么全靠重复
- 依赖/架构失控:循环依赖、层级倒挂、跨层访问
- 组织层面的问题:需求频繁变更、没有技术规划、评审走过场
注意:最后一条很重要。
技术债不只是代码问题,很多时候是组织决策在代码里的投影。
4. 什么债可以欠?什么债千万别欠?
你可以用一个简单标准判断:
4.1 可以欠:可隔离、可回收、影响面小
例如:
- 做一个临时开关(feature flag)快速上线
- 做一个可替换的适配层(adapter)
- 把“脏逻辑”关进一个模块,后续再重写
关键是:
- 你知道它是债
- 你知道怎么还
- 你知道影响范围
4.2 别欠:基础设施层面的债
例如:
- 权限体系乱写
- 数据模型随意变更
- 核心链路没有可观测性
- 故障恢复/备份缺失
这种债会把利息收在所有功能上:项目越大越痛。
5. 怎么量化技术债?让它从“情绪”变成“指标”
技术债难在:大家都知道它存在,但没人知道“有多严重”。
你可以用这些可执行的信号:
- 交付速度趋势:同等规模需求耗时是否持续上升?
- 变更失败率:发布失败/回滚次数是否增加?
- 缺陷密度:同类 bug 是否反复出现?
- 代码健康指标:重复率、复杂度、圈复杂度、依赖环
- 开发者体验:本地跑起来要多久?改动一次回归要多久?
这些不是为了 KPI,而是为了让“还债”有一个可讨论的依据。
6. 还债策略:不是靠“周末加班重构”,而是靠系统
6.1 建一个“债务清单”(Debt Register)
把债务写下来:
- 债务描述
- 影响范围
- 风险等级
- 预计偿还成本
- 触发还债的条件(比如:下次碰到该模块就顺手还)
写下来很关键:
- 不写出来就永远是“大家都知道,但没人管”
6.2 给还债留预算:10%~20% 的制度化时间
常见做法:
- 每个迭代固定留 10%~20% 做重构、补测试、清理依赖
- 或者设立“技术债务日”
你不需要一次还清。
你需要的是:让债务不再增长,且利息逐步下降。
6.3 还债优先级:先还“利息最高”的
别被“看起来很脏”的代码骗了。
优先还:
- 改动频繁的核心路径
- 经常引发事故的模块
- 影响多个团队的公共组件
因为这里的利息最高。
6.4 用测试做“还债的货币”
很多重构失败不是技术能力问题,是缺少安全网。
- 没测试 → 不敢改 → 只能继续欠
- 有测试 → 能改 → 债务能还
测试不是“写给 QA 的”,是“写给未来自己和团队的”。
7. 面试怎么讲技术债?
你可以这样回答:
- 技术债是用未来成本换当前速度。
- 关键在于有意识欠债、可回收、可量化。
- 我会用交付速度/变更失败率/缺陷趋势等信号衡量。
- 偿还策略上,用债务清单 + 固定预算 + 测试安全网,优先处理利息最高的债。
这比“我们项目技术债很多”专业太多。
总结
- 技术债不是骂人词,它是一种“工程融资”。
- 它有本金与利息,最可怕的是利息会滚。
- 可以欠可隔离、可回收的债;别欠基础设施级的债。
- 还债要制度化:债务清单、固定预算、测试安全网。
小明金句收尾:
技术债不可怕,可怕的是你以为自己没欠。