# 为什么软件开发总有“技术债”？你需要了解管理技术债务的策略与方法

> 本文公开全文。

原文：https://utgd.net/article/20789

🔗 原文链接

> 编者按：在看到这篇文章的时候还挺有共鸣的，因为在开发时我们常说要避免产生“技术债”，所以往往现实的种种压力总会让这个美好的愿望落空。所以文中的一句“问题不在于消除债务，而在于管理债务”很有道理。如果你是一位正在迷茫期的开发者，这篇文章我非常推荐你看看原文。

“技术债务”，这个词听起来有点陌生，但如果你在软件开发这一行做过几年，肯定对它不陌生。Eric Allman 在这篇文章里，把这个概念讲得更透彻了，并且分享了一些策略与方法。

1992 年，Ward Cunningham 在 OOPSLA 会议上首次提出了 “技术债务” 这个概念。他将其比作 “借债”，尤其是那些由于各种原因未遵循最佳实践的代码。技术债务不仅限于新编写的代码，还包括文档不全、错误信息不明确、使用低效算法等问题，这些都是工程师在面对截止日期、工具成本和技术能力等压力下做出的权衡。

技术债务和金融债务有相似之处，都需要偿还，并且会产生 “利息”，即由于技术债务导致的额外成本。例如，2011 年加州大学伯克利分校的 CalMail 系统崩溃，原因在于未及时升级系统以应对容量问题。尽管这种技术债务是出于预算紧张的情况下有意为之，但最终带来了巨大的问题。

技术债务的影响是全方位的。客户、帮助台、运维、工程师、市场营销、管理层，每个人都会感受到它的存在。管理技术债务如同管理金融风险，需要谨慎规划和及时处理，否则可能导致系统崩溃或公司倒闭。

技术债务的管理对于系统的短期和长期成功都至关重要。 Construx Software 首席执行官兼首席软件工程师 Steve McConnell、软件设计师 Martin Fowler 提出了不同类型的技术债务分类方法，帮助人们理解和管理这些债务。

McConnell 将技术债务分为短期战术性和长期战略性，而 Fowler 则从鲁莽 / 审慎和有意 / 无意两个维度进行分类。这些分类有助于团队在项目初期和后期更好地识别和处理技术债务。

技术债务不仅仅是开发人员的责任。运维部门也会因为不升级硬盘阵列、未能记录系统文档等问题而产生技术债务。

文中有一句——

> Technical debt is inevitable\. The issue is not eliminating debt, but rather managing it\. 技术债务是不可避免的。问题不在于消除债务，而在于管理债务。

管理层在决策过程中需要平衡各种因素，理解技术债务的长期成本，并制定还债计划。频繁发布周期虽然能快速获得用户反馈，但如果不及时解决技术债务，也会导致系统迅速积累问题，甚至拖垮整个项目。

有效的技术债务管理需要跨部门协作和全面的风险管理策略。客服人员、运维工程师和市场部门都需要了解技术债务的影响，并共同努力减轻其负面效应。优秀的管理层能够平衡风险与收益，制定合理的项目计划，确保系统的可维护性和长远发展。

最后，正如 Fred Brooks 在《人月神话》中所说：“计划扔掉一个版本——你终会这么做的。” 这句话提醒我们，即使是短期原型也需要慎重对待，因为它们很可能会最终成为交付给客户的产品。技术债务虽然不可避免，但通过有效管理，可以避免其对系统和组织的长期负面影响。

---

[前往标准阅读页](https://utgd.net/article/20789?audience=web)
