名词百科

什么是技术债务?

一句话定义

技术债务是为了短期交付速度而在代码质量或设计上做出的妥协,它会在后续迭代中以更高的修改成本偿还。这个概念由 Ward Cunningham 提出,借用金融债务的比喻。

发布者:黔序科技

它到底是什么

技术债务不是「代码写得丑」的同义词,而是一个刻意的取舍:现在用更快的方式实现,代价是以后改起来更贵。关键区别在于是否知情——为赶上线而简化实现并记录下来,是债务;不知道自己欠了什么,是失控。

债务本身不必然是坏事。产品还没验证时追求代码完美,是把资源投在了可能被删掉的功能上。问题出在两处:欠债不记账,以及长期不还导致利息滚到无法承受。

怎么运作的

债务的「利息」体现为四类具体成本。

改动变慢:耦合过紧的模块,改一处要回归一大片,迭代速度逐轮下降。

缺陷率上升:缺少测试覆盖的部分,每次改动都可能引入不易察觉的破坏。

新人上手变难:没有文档、命名混乱的代码,交接成本直接转化为人力成本。

不敢升级:依赖版本长期不更新,最后升级变成一次高风险的大手术。

管理方法不是「一次还清」,而是给债务排优先级:影响核心链路、阻碍当前迭代的,优先还;只影响局部体验的,可以挂着。每次迭代留出固定比例处理债务,比攒到最后重构更现实。

容易混的几个概念

  • 代码坏味道:具体的实现问题征兆,是债务的一种表现。
  • 重构:不改变外部行为的前提下改善内部结构,是还债手段。
  • 临时方案:一次性的绕过办法,如果不清理,会沉淀为债务。
  • 技术债 ≠ bug:债务是结构问题,bug 是功能错误,前者不修会持续增加后者的发生概率。

常见问题

技术债务一定要还清吗?

不必。债务的价值判断取决于这段代码还会不会继续演进:即将下线的模块,还债是浪费;核心链路且要长期迭代的模块,拖延的代价会持续放大。

怎么说服业务方投入还债?

把债务翻译成业务语言:某类需求现在要多久、还完要多久、上次事故的根因是什么。抽象的「代码质量」很难获得预算,具体的「这个功能每次改动都要多花几天」可以。

A 交付方式 · 同组词条

技术栈技术栈是构建一个软件系统所使用的一系列技术的组合,通常包括前端框架、后端语言与框架、数据库、中间件、部署环境等层次。驻场开发驻场开发是开发人员到客户现场办公的交付方式,远程协作则是团队分散在不同地点通过网络协同。两者的差别在于沟通密度与知识传递方式。SDLCSDLC(Software Development Life Cycle,软件生命周期)是软件从需求产生到退役的完整过程,通常划分为规划、需求、设计、开发、测试、部署、维护七个阶段。敏捷开发敏捷开发是一组以短周期迭代、持续交付可用软件为核心的开发方法,Scrum 是其中应用最广的一种框架。它们共同的前提是接受需求会变化。MVPMVP(Minimum Viable Product,最小可行产品)是用最小功能集验证核心假设的产品形态。它要验证的是「有人愿意为这个解决方案付费」,而不是展示完整的产品构想。买断买断是一次性付费获得软件永久使用权(或含源码)的交付方式;订阅是按周期付费获得使用权的模式。两者的差别在于是否拥有程序副本。源码交付源码交付是软件开发方把源代码及其相关资产移交给客户的行为。它决定了客户在合同结束后能否自行修改、部署和继续维护系统。开源系统开源系统是源代码公开、允许他人使用、修改和再分发的软件。开源不等于免费,也不等于可以随意商用——具体权限由许可证决定。