“这个模块太乱,必须重构。”这样的判断可能完全正确,却还不足以帮助团队安排投入。排在同一张计划表上的,还有客户承诺、新产品和系统运维。技术负责人需要把问题解释到可以比较、可以取舍的程度。
技术债可以理解为过去的实现选择给后续变更和维护增加的负担。有些是为了赶上窗口主动承担的,有些来自需求变化或认识不足。记录形成原因有助于改进决策,但治理讨论不必先追究当时谁做错了。
从一条具体记录开始
与其登记“订单系统架构落后”,不如找出一次被它拖慢的变更:原本改动什么,额外涉及哪些模块,排查、测试和返工分别花在哪里。同样,稳定性问题应关联具体事故和恢复记录。
先区分三类影响:
- 已经发生的损耗:重复回归、人工补数、事故处理、变更返工,有记录可以核对。
- 有依据的潜在风险:恢复依赖一个人、关键依赖无法维护、某类异常尚无处置办法。记录触发条件和影响范围,保留不确定性。
- 尚待验证的机会影响:某项业务计划需要的能力受阻。请业务负责人确认计划是否真实、何时需要、是否有替代路径。
不要把“可能支持更多渠道”直接折算成收入,也不要把研发节省的工时自动视为现金成本下降。节省下来的容量如何使用,需要另一个具体安排。
一张技术债卡,足以支撑首次讨论
建议每项只写七个字段:
- 问题与形成原因,附事故、需求或代码位置等证据
- 影响哪些业务,影响是已发生还是估计
- 暂时不处理的后果,以及可接受多久
- 两个以上可行选项,包含局部控制或维持现状
- 人员投入、依赖和可能增加的新复杂度
- 预期改善及估计依据,注明信心高低
- 验收方法、负责人和停止条件
没有证据的条目可以保留为观察项,先做小范围调查。不要为了填满台账,把所有“不够优雅”的代码都变成必须排期的任务。
排序时,先分风险,再比回报
已确认需要立即处理的安全、数据完整性或关键业务连续性问题,应按相应响应机制处理。它们不适合等待季度评分,也不必先证明短期收入回报。
其余改进项可以依次讨论:
问题会不会反复出现? 一个即将下线的低频模块,即使代码难看,也未必值得重构。频繁修改的关键路径,持续损耗则更值得关注。
治理能否直达成因? 发布缓慢如果主要来自审批等待,重构代码对总周期的作用可能很小。先找到主要耗时,避免用熟悉的技术方案处理组织问题。
有没有更小的解法? 增加测试、隔离高风险接口、补齐恢复文档,可能先控制大部分风险。长期架构方案可以继续评估,但不必把短期保护措施一起拖住。
需要占用什么稀缺资源? 比较的不只是人天,还包括关键人员、业务验证窗口和上线风险。两个项目总工作量相似,对同一位核心工程师的依赖可能完全不同。
评分可以帮助暴露分歧,但把主观的影响、概率和范围相乘,再除以一个估算工期,容易制造虚假的精确感。遇到排序接近的项目,讨论证据质量和可逆性往往更有用。
情境示例:价格规则难以修改
假设一个团队每次调整价格,都要回归多个产品。先抽查最近几次同类变更,发现大量时间花在识别共享规则的影响范围,团队提出拆分规则模块。
此时可以先给高频规则补回归用例,显式标记使用方,再替换其中一类规则。试点要记录同类变更的实际用时、测试工作量和缺陷情况,同时验证结果与旧逻辑一致。
如果回归时间减少,但配置规则和处理异常又消耗同等时间,就不能只汇报开发提速。如果后续业务几乎不再修改价格,剩余拆分也应重新评估。治理方案要能随证据变化,不必为完成原定架构蓝图继续投入。
把治理拆成能独立停止的阶段
一个阶段最好对应一个可以验证的结果,例如补齐关键路径测试、消除某个单点恢复依赖,或让一个模块可以独立发布。
每阶段都设置投入边界。发现范围显著扩大、依赖无法解决、收益假设不成立时,先停下扩展工作,整理已完成部分及运行风险,再决定调整或结束。治理中引入新组件、新接口和新运维职责,也要记入成本。
团队可以根据实际故障和维护负担,为治理预留容量。比例应定期调整,不需要把某个固定百分比当作所有团队的标准。若临时业务挤占了治理时间,要同步说明被延后的风险由谁接受、何时复评。
完成重构之后,还要回来核对
不同债务对应不同的验收:稳定性看相关异常是否得到控制以及恢复是否可执行;交付效率看可比需求的总周期;能力限制则用真实的新场景验证。
对低频事故,短期“没有再出问题”不足以证明风险消失,还需要测试、演练和设计检查。对效率改善,注意需求难度及团队人员变化,避免将所有差异归功于治理。
技术负责人提供技术证据,业务或产品负责人确认流程上的影响。最终记录可以很简短:改善了什么,尚未证实什么,剩余风险是什么,后续还值不值得做。持续保留这样的记录,下一次技术债讨论就不必每次从头争取信任。
