Published on

All code is technical debt

Authors
  • avatar
    Name
    青雲
    Twitter

原文:https://www.tokyodev.com/articles/all-code-is-technical-debt

作者:paul-mcmahon

总结

💬 技术债务是指通过加速软件开发获得的临时速度提升,以牺牲未来开发速度为代价。

💬 随着应用的成熟,新功能的添加会变得越来越复杂,因为需要考虑之前所有功能的假设。

💬 开发者应确保代码创造的价值大于其技术债务,避免编写不必要的代码,并在添加新功能时考虑现有假设的约束。

📋 摘要

  • 技术债务的概念 技术债务由Ward Cunningham首次提出,比喻为通过加速软件开发过程获得的临时速度提升,类似于贷款,需要在未来偿还利息,即减缓后续开发速度。技术债务可以是有用的工具,但积累过多可能导致产品开发严重放缓。

  • 新应用的开发体验 新应用的开发初期,由于没有技术债务,可以快速添加新功能。但随着应用成熟,开发速度会逐渐减慢,尤其是对于实现不佳的产品。

  • 增加假设,增加债务 随着应用功能的增加,项目会积累一系列基本假设,这些假设会影响未来的开发。以Doorkeeper事件平台为例,最初只支持简单的注册流程,但随着功能的扩展,需要考虑更多假设,如参与者数量限制、预付费等。

  • 功能可能具有负价值 如果技术债务超过功能带来的价值,该功能就可能具有负价值。本地化是常见的一个例子,如果本地化工作做得不好,可能会增加比其价值更多的技术债务。

  • 代码的价值 软件的价值来自于其对用户的有用性,而不是代码的质量。即使代码实现不佳,只要能完成有用的任务,也比实现得很好但不具实用性的代码更有价值。

  • 避免技术债务 避免技术债务的一个方法是不编写代码。例如,作者通过使用Google Apps的群组功能来筛选工作申请邮件,而不是自己开发一个复杂的筛选系统。

  • 在现有假设的约束下工作 在Doorkeeper中,为了确保参与者总是收到提醒,而不是依赖组织者手动发送消息,开发团队通过在现有消息功能的基础上增加定时发送功能,而不是创建一个全新的独立功能。

💡 思考

  1. 技术债务的管理需要开发者具备前瞻性思维,以确保短期的开发速度提升不会损害长期的可维护性和可扩展性。
  2. 功能开发应该基于深入的用户和市场研究,确保每项功能都能为用户带来实际价值,避免开发出用户不需要的功能。
  3. 技术债务的优化不仅仅是代码层面的重构,更涉及到产品规划和设计阶段的决策,需要团队成员之间的紧密合作和沟通。