技术债是战略选择,不是技术失误
那个被误解的概念
“又有技术债?你们怎么写的代码!”
这是我听过无数次的话。产品经理、CTO、甚至 CEO 都会把技术债当成技术团队的失误——好像我们在故意写烂代码。
但真相是:
技术债是战略选择,不是技术失误。
就像企业会借债融资来加速增长,技术团队也会借技术债来加速交付。关键不在于”有没有债”,而在于”为什么借、借多少、什么时候还”。
我的三次借债经历
案例一:MVP 阶段(借债:⭐⭐⭐⭐⭐)
2022 年,我负责一个创业项目。投资人给了一个不可能的任务:3 个月上线,验证市场。
我们做了什么?
- 跳过了单元测试(“上线后再补”)
- 直接用 JSON 文件代替数据库(“用户多了再迁移”)
- 前端代码复制粘贴而不是组件化(“先做出来”)
- 硬编码配置而不是环境变量(“快速迭代”)
结果:如期上线,获得首批 1000 用户,拿到下一轮融资。
代价:6 个月后,技术债爆发。重构花了 2 个月。
评价:✅ 正确的借债。如果没有当初的”烂代码”,产品根本活不到验证市场的时候。
案例二:增长阶段(借债:⭐⭐⭐)
2023 年,产品进入增长期,DAU 从 1000 涨到 10 万。
我们面临选择:
- 方案 A:重写核心模块,支持百万并发(3 个月)
- 方案 B:临时加缓存、加索引、做读写分离(1 周)
我们选了 B。
结果:系统撑住了,但技术债积累。每次加新功能都要绕过各种临时方案。
代价:一年后,临时方案变成了”祖传代码”,新员工不敢碰。
评价:⚠️ 应该更早还债。当时应该用 1 个月做方案 A,而不是拖成技术噩梦。
案例三:成熟阶段(借债:⭐)
2024 年,产品稳定,团队扩张到 30 人。
这时候我们建立了严格的技术债管理制度:
- 每次 sprint 留出 20% 时间还债
- 新功能必须包含测试覆盖率 80%+
- 代码审查必须检查架构债务
- 每季度技术债评估会议
结果:技术债可控,团队效率提升 40%。
评价:✅ 成熟的债务管理。就像企业有了 CFO,技术债也成了可管理的资产。
技术债的类型学
不是所有技术债都一样。我将其分为四类:
1. 故意债(Prudent Debt)
特征:明知是债,主动借。
例子:
- MVP 阶段跳过测试
- 用 mock 数据快速验证 UI
- 复制粘贴代码先上线
管理:必须记录,明确还款计划。
2. 无意债(Inadvertent Debt)
特征:不知道这是债,事后才发现。
例子:
- 选了错误的架构(事后证明不适用)
- 依赖了即将废弃的库
- 性能瓶颈在设计时没考虑到
管理:通过技术评审、架构 review 减少。
3. 疏忽债(Reckless Debt)
特征:知道更好的做法,但偷懒。
例子:
- “复制粘贴最快”
- “反正没人会看这段代码”
- “以后再说”
管理:代码审查、团队文化。
4. 过时债(Bit Rot)
特征:当时是对的,现在过时了。
例子:
- 旧版本依赖的安全漏洞
- 业务变化导致的设计过时
- 团队流失导致的知识断层
管理:定期重构、文档化、知识传承。
技术债评估框架
我建立了一个简单的评估框架,帮助团队决策。
借债决策矩阵
| 维度 | 高 | 低 |
|---|---|---|
| 业务价值 | ✅ 可以借 | ⚠️ 谨慎借 |
| 还款能力 | ✅ 可以借 | ❌ 不要借 |
| 债务成本 | ⚠️ 谨慎借 | ✅ 可以借 |
| 时间压力 | ✅ 可以借 | ❌ 不要借 |
决策规则:
- 4 个 ✅:大胆借
- 3 个 ✅:可以借,记录还款计划
- 2 个 ✅:谨慎借,需要 TL 批准
- ≤1 个 ✅:不要借
债务登记制度
每次借债,必须创建技术债 Ticket:
## 技术债登记
**债务描述**:当前使用 JSON 文件存储用户数据
**借债原因**:MVP 阶段快速验证,3 个月内用户 < 1000
**债务成本**:无法支持并发,无法查询,数据易丢失
**还款计划**:
- Sprint 5: 设计数据库 schema
- Sprint 6-7: 数据迁移脚本
- Sprint 8: 切换上线
**负责人**:@ioodu
**到期日**:2024-06-01
**验收标准**:
- [ ] 数据完整迁移
- [ ] 零停机切换
- [ ] 回滚方案测试通过
技术债仪表盘
我们在 Notion 建立了技术债看板:
| 债务 | 类型 | 严重程度 | 创建日期 | 计划还款 | 状态 |
|---|---|---|---|---|---|
| 缺乏测试 | 故意债 | 🔴 高 | 2024-01 | 2024-04 | 🟡 进行中 |
| 单体架构 | 无意债 | 🟡 中 | 2023-06 | 2024-12 | 🟢 计划中 |
每周站会,我们会 review 这个看板。
还债策略
策略一:持续小额还债(推荐)
每个 sprint 留出 20% 时间处理技术债。
优点:
- 不中断业务交付
- 债务不会累积到爆发
- 团队习惯良好
缺点:
- 大重构需要很长时间
- 有时候需要临时方案
策略二:集中还债
每季度安排一个”技术债 sprint”,全员投入还债。
优点:
- 可以做大重构
- 团队专注,效率高
- 明显的债务减少
缺点:
- 业务功能暂停
- 需要管理层支持
策略三:重构即还债
新功能开发时,顺便重构相关代码。
优点:
- 业务和技术并行
- 重构有业务价值支撑
缺点:
- 容易过度重构
- 排期压力大
我的建议:以策略一为主,策略二为辅,策略三看情况。
团队文化
技术债管理,最终是文化问题。
❌ 有毒的文化
- ” deadline 第一,代码质量不重要”
- “这是技术债,以后再说”
- “重构就是浪费时间”
- “以前的代码太差了,重写吧”
✅ 健康的文化
- “我们借这笔债,是因为…,计划在…时候还”
- “这段代码有技术债,让我先记下来”
- “重构能让未来的开发更快”
- “前人当时有他的考虑,我们理解后再改进”
建立文化的方法
- 领导示范:TL 要承认自己也借债,并展示如何管理
- 债务可视化:让技术债看得见
- 还债庆祝:完成重构后庆祝,肯定贡献
- 无责回顾:技术债 retrospective,不指责,只改进
给不同角色的建议
给工程师
- 写代码时问自己:“这是借债吗?如果是,值得吗?”
- 发现债时,创建 ticket,不要只是抱怨
- 重构时,解释为什么,而不是只说”以前的代码太烂了”
给 Tech Lead
- 建立技术债评估框架
- 保护团队还债的时间
- 向管理层解释技术债的商业价值
给产品经理
- 理解技术债是业务决策,不是技术失误
- sprint 规划时预留还债时间
- 不要只追求功能速度,要追求可持续的速度
给 CTO/CEO
- 技术债是资产,也是负债,需要管理
- 允许团队借债,但要求透明和计划
- 技术债爆发时,不要责怪,要支持解决
总结
技术债不是敌人,盲目借债和从不借债才是。
关键原则:
- 透明:所有债都要看得见
- 有计划:每笔债都要有还款计划
- 可追踪:定期检查债务状况
- 文化:建立健康的债务观
“完美的代码是负债,适当的债务是资产。” —— 改编自《重构》
技术债就像金融债:
- 合理的杠杆能加速增长
- 过度杠杆会导致破产
- 关键是管理和控制
希望这篇文章能帮助你建立技术债的管理框架。记住:
技术债是战略选择,不是技术失误。
延伸阅读
- 《重构》Martin Fowler
- 《技术债》Ward Cunningham (原始论文)
- 《Clean Architecture》Robert C. Martin
- Martin Fowler 的技术债四象限
你在项目中遇到过哪些技术债?如何管理的?欢迎在评论区分享。