知识卡片
技术债产生的五个根本原因
内容
不同类型的技术债来自开发过程的不同环节和不同利益相关者,但从根本原因看,技术债往往源自项目经理、架构师或开发人员做出的某些决策,而促使这些决策出现的情形可以归纳为五点。进度压力:临近项目截止日期时开发者希望尽快完工,容易仓促行事(如直接复制粘贴现成代码)——这些代码短期内可能不产生不良后果,但经过多个开发周期、多个开发者都采用这种”解决方案”后,累积效应会让整个项目难以理解且极易出错;这条原因揭示了技术债最典型的”温水煮青蛙”特征:单次决策的代价很小,但重复决策的累积代价会指数级放大。软件设计师缺乏足够的经验和技巧:如果设计师缺乏对设计基础和原则的理解,项目容易出现各种问题,指导团队和检查问题时也难以胜任。不注重设计原则的应用:开发者缺乏根据通用原则设计编写代码的意识或经验,容易造成代码难以扩展或修改,尤其是在团队开发或需要不断更新的项目中问题会被放大。缺乏对设计坏味道和重构的意识:很多开发者不会注意到设计坏味道,这类坏味道会随时间推移蔓延扩大、导致软件结构质量变差;坏味道本可以通过及时重构解决,但部分开发者缺乏及时发现问题并重构的意识,导致技术债随时间累积。开发中有意采用非最优的选择:这是唯一一种”主动、清醒”选择欠债的情形——项目团队为了达成某个更重要的目的(如尽快达成季度目标利润、抢占市场先机),有意采用次优但不影响产品整体效果的设计以加快开发进程,并计划在下一开发周期偿还;这种技术债的根本性质是”为实现整体利益最大化而选择的暂时妥协”,与前四种因经验不足或意识缺失而”被动”产生的技术债有本质区别——前四种是能力或态度问题,第五种是深思熟虑后的战略决策。
参考来源
- 位置:《软件架构理论与实践》第19章《软件架构技术债》"19.2.3 技术债的产生"节(源文件:_epub-src/OEBPS/text00159.html)
- 结论依据:原文列出五点技术债产生的根本原因("1)进度压力……2)软件设计师缺乏足够的经验和技巧……5)开发中有意采用非最优的选择"),并说明第五种情形"这种技术债的根本性质是为了实现整体利益的最大化而选择的暂时妥协",直接支撑本卡片结论。
- 原始内容:在某些项目中,为了达到某些更重要的目的,有时会有意地做出一些会产生技术债的决定,并充分认识到技术债的存在……这种技术债的根本性质是为了实现整体利益的最大化而选择的暂时妥协。