跳到主要内容

技术债、优先级与业务价值

技术债是当前技术选择持续增加未来交付成本或运行风险的部分,偿还优先级需要与业务影响、发生概率和投入一起评估。

1. 把技术债写成具体问题

“代码很乱”不能直接进入排期。一项可管理的技术债要说明:

  • 具体位于哪个系统、模块或流程;
  • 由什么历史选择或当前约束形成;
  • 正在影响哪些用户、团队或业务指标;
  • 如果继续保留,成本会怎样增长;
  • 哪些变化会触发风险;
  • 谁负责跟踪和重新评估。

例如:“订单发布仍需人工修改三处配置,过去六个月造成两次回滚,平均增加四小时发布等待”,比“发布系统需要重构”更容易比较和验收。

缺陷、功能缺口、过时依赖和技术债可以有交集,但处理方式不同。安全漏洞可能需要立即修复,不必等待技术债排序;纯审美偏好也不应自动占用业务资源。

2. 区分本金与持续利息

本金是消除问题所需的一次性投入,例如重构、迁移和测试。利息是继续保留问题带来的重复成本,例如:

  • 每次需求需要额外修改和回归;
  • 发布频率下降、等待时间增加;
  • 故障、告警和人工值班增多;
  • 云资源或许可证持续浪费;
  • 新成员理解系统需要更长时间;
  • 关键依赖失去安全更新。

利息可以从 issue、变更记录、事故、工时和账单中估算。即使不能得到精确金额,也可以记录频率、持续时间和影响范围,形成可比较的数量级。

一项债务本金很高、利息很低时,可以继续观察;本金较小并且每周都在付利息时,通常应尽快处理。

3. 风险债务单独评估

有些问题尚未造成日常效率损失,却可能引发严重事件,例如证书无法轮换、备份从未恢复、单点组件停止维护。

这类债务使用风险评估:

预期风险 = 发生概率 × 影响 × 暴露时间

还要考虑风险是否不可逆、能否检测和是否有替代路径。低概率的数据永久丢失通常比高频的小额资源浪费优先级更高。

合规、安全和已承诺 SLO 可以形成硬约束。这些问题由对应责任人确定最低处理要求,不能只放进普通价值矩阵等待。

4. 与业务工作使用共同尺度

技术债和功能需求争夺同一批人力时,需要把两者都转换为结果:

  • 减少多少故障和用户损失;
  • 缩短多少需求交付或恢复时间;
  • 降低多少运行成本;
  • 解锁哪些已经排期的业务能力;
  • 降低哪些安全或合规风险;
  • 需要多少工程时间和迁移风险。

可以使用影响、紧迫度、信心和投入形成简单评分,但评分只是排序输入。重大依赖关系、硬截止日期和不可逆风险仍需要单独判断。

“技术质量”本身可以有价值,但要说明它如何影响持续交付、可靠性和维护责任,避免技术团队与业务团队使用两套无法对话的语言。

5. 选择合适的偿还方式

技术债不都需要一次性重写。常见路径包括:

  • 在相关功能开发时顺带重构局部;
  • 建立适配层,逐步替换旧实现;
  • 用自动化测试和监控先降低风险;
  • 停止扩展旧模块,把新需求放到新边界;
  • 删除低价值功能或合并重复系统;
  • 在明确窗口完成集中迁移。

选择路径时比较价值出现时间和中间状态。大规模重写在完成前很少产生收益,还会追赶旧系统持续变化;增量方式更容易验证,但兼容期会增加临时复杂度。

如果问题来自缺少所有权、发布流程或架构约束,只改代码会再次积累。偿还方案要处理产生债务的机制。

6. 为主动借债设置到期条件

为了固定发布日期采用临时方案可以是合理选择,但要在决策当时记录:

  • 得到的短期业务价值;
  • 放弃了哪些质量属性;
  • 允许保留到何时或什么规模;
  • 需要补充的测试、监控和保护;
  • 偿还负责人和触发条件。

“以后再优化”没有约束,通常会永久保留。可以把到期条件设为流量、租户数、错误预算、依赖版本或下一阶段产品目标。

主动承担的债务也要控制总量。团队同时维护大量临时路径时,新的业务价值会被兼容和排障成本抵消。

7. 在日常工作中持续处理

只靠每季度一次“技术债冲刺”,容易让债务在其余时间继续增长。更稳定的做法包括:

  • 每项债务有所有者、证据和复审日期;
  • 产品与工程共同查看高风险和高利息项;
  • 功能规划时计算受影响模块的偿还成本;
  • 错误预算耗尽时优先可靠性工作;
  • 为小规模持续改进保留固定容量;
  • 大型迁移按业务里程碑单独立项。

固定比例不是普遍答案。债务很少时不必为了用满比例创造工作;严重影响交付时,固定比例又可能不足。以可见风险和价值动态调整。

8. 完成标准需要量化验证

技术债任务的完成标准不是“完成重构”。它应回到原始问题,例如:

  • 发布人工步骤从三项降为零;
  • 相关变更前置时间降低 50%;
  • 旧 API 流量归零并删除兼容层;
  • 恢复演练满足 RTO/RPO;
  • 单位请求成本下降且 SLO 不退化。

指标没有改善时,说明原因判断、方案或实施范围可能有误。及时停止低收益投入,比继续扩大重写范围更有价值。

9. 面试题

9.1 业务需求很紧时,怎样决定是否优先偿还技术债

出现公司:蚂蚁金服

考察重点

  • 具体债务、持续利息与风险暴露。
  • 与业务需求使用共同结果和成本比较。
  • 增量偿还、到期条件和量化验收。

相关内容:第 1 节“把技术债写成具体问题”至第 8 节“完成标准需要量化验证”。

参考回答

我会先把债务写成具体系统问题,用事故、交付等待、人工工时、成本或安全暴露说明持续利息。再估算消除它的本金,以及继续保留的发生概率和业务影响。合规、安全、数据丢失和已承诺 SLO 属于硬约束,优先满足最低要求;其他债务与功能一起比较用户价值、解锁能力、风险降低、投入和信心。

偿还方式优先选择能分阶段产生收益的局部重构、适配替换、自动化保护或删除低价值能力。确实需要短期借债时,记录到期条件、保护措施和负责人。完成后用发布时间、故障、成本或旧路径流量验证原问题已经改善;没有改善就重新评估,不把“重构完成”当成果。