一 前言
技术债在软件开发过程中不可避免。但是,在紧急的产品需求面前,技术债往往会被人忽略,解决时期一拖再拖。长期以往,技术债像滚雪球般越滚越大,给我们的迭代开发将会带来致命影响,偿还技术债的成本也会成倍增加,所以我们必须重视技术债,积极还债。认识技术债系统文章,将会从技术债的概念,技术债带来的严重后果,技术债出现的场景,技术债的管理过程和技术债吃偿还方法来详细给大家探讨技术债的方方面面,让大家认识技术债的同时,还能够有条不紊的偿还技术债。由于经验和能力有限,总结不全的地方,还希望大家在评论区留言讨论。
二 什么是技术债
Wiki之父Ward Cunningham在1992年第一次提出技术债的概念。他说:“代码写好就提交,意味着欠债的开始。稍微欠点儿技术债的确可以加快开发速度,但是前提是事后及时重写代码。如果只借不还,后果很危险。在不准确的代码上所花的每一分钟,都算是技术债的应付利息。不稳固,脆弱的代码实现所引发的债务负担,会使整个工程组织陷入裹足不前的艰难境地”。技术债概念提出后,软件行业对以上定义做了一些修改,如今,技术债既指我们有意识选择非最佳捷径,又指许多损害软件系统的不良实践。具体包含以下几种:
1)不合适(糟糕)的设计。设计存在巨大漏洞,或者业务发生重大改变,之前曾经有效的设计变得不再适用;
2)缺陷。已知的,但还没有时间解决的软件中的问题;
3)测试覆盖不充分。有些地方我们明明知道该做更多测试却没有做;
4)手工测试过多。实际该做自动化测试的时候我们还在做手工测试;
5)集成和版本管理不善。在做集成和版本管理的时候,采用的方式既费时又容易出错;
6)缺乏平台经验。例如,我们大型机应用需要用COBOL来写,但是身边精通COBOL的程序员却不多;
有些技术债是可以消除的,只要能够提供适当的培训,能够更好的理解技术实践的运用,能够做出合理的业务决策。我们把这种技术债称之为:草率的技术债,或者无心的技术债。此外,还有一种不可避免的技术债,通常无法预测,也无法预防。例如,我们使用了第三方的一个组件。该组件的接口随着时间的推移不断发展,变得越来越臃肿庞大,从而欠下了技术债,该技术债是我们无法预见第三方组件开发人员将来怎样进一步发展组件而带来的。最后,还有一种技术债是策略性的技术债。这种技术债可以作为一种工具,帮助组织从经济角度更好的量化和权衡重要的,实效性强的决策。例如:某团队特意做了一个策略性决策,打算把实效性强,但是带有技术债的产品推向市场,等有收益之后再用自筹资金进行后续开发。
三 技术债会带来哪些严重后果
俗话说:欠债还钱,天经地义。同样,欠下了技术债,也是需要及时去偿还的,如果日积月累,将会造成严重后果。具体后果有以下几种:
1)爆发点不可预期。技术债往往以不可预测的非线性方式增长。在原有债务基础上增加任何一点点技术债,都会产生严重危害,远远超过新技术债自身隐含的危害。当技术债达到“临界量”的时候,产品也就达到爆发点,变得不可管理甚至崩溃。这种非线性特征是一个不容忽视的业务风险。因为我们不知道最后一根稻草何时会压垮骆驼,然而一旦发生,后果不堪设想。
2)交付时间延长。偿还技术债意味着我们需要向未来借用工作时间,从而会影响我们开发的进度和节奏;
3)缺陷数量可观。技术债务严重的产品会变得越来越复杂,因而也让开发人员更难把事情做对。
4)开发和支持成本上升。技术债一增加,开发和支持成本会开始增加。过去一直简单又便宜,现在却变得复杂而且昂贵,如下图所示。
5)产品萎缩。如果因为技术债的原因,对老产品停止增加新特性或修复缺陷使其失去活力,它对当前或潜在客户就会变得越来越没有吸引力。
6)可预测性降低。如果产品确实已经债台高筑,基本上不太可能进行任何形式的预测啦。
7)表现越来越差。随着技术债越积越多,人们开始预计工作表现逐渐越变越差,进而降低他们对结果的期望;
8)挫折感四处弥漫。高技术债所导致的最不幸的后果是,价值链中的所有人都因此而备受挫折。所有小而烦人的捷径积累在一起,使产品开发工作痛苦不堪。
9)客户满意度降低。随着挫败感增强,客户的满意度也会下降。
四 总结
本文从技术债的概念入手,给大家讲解了技术债的种类,技术债带来的严重后果,从而让大家清晰的了解技术债,为后续技术债的管理和偿还做好铺垫。欢迎大家继续关注“还债啦!技术债系列”文章,了解技术债,学习解决技术债的方式方法,让技术债早日清除!我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表