引言
对于程序员来说,技术债这个词应该再熟悉不过了。新入职一个公司后,加入的项目往往或多或少的都会存在技术债,有些是以前的工程师留下的债务,有些是当下开发的需求新产生的,接下来本篇就让我们详细的探索一下技术债这个话题。
什么是技术债
第一次交付的代码如同欠债一样,只要能通过重写还清,一点债务就能加速进程……但如果债务没有即时还清,那么就危险了。在问题代码上花费的每一分钟都会算作是债务的利息。地基不牢的实现所带来的债务负担甚至会让全部工程团队停滞不前,无论这种实现是否是面向对象的。
—— Ward Cunningham(沃德·坎宁安)
简单的说,技术债其实就是那些技术上没做好的事情,会逐渐体现为长期的成本。日常开发中不单单是技术有债务的问题,业务发展同样会带来各种各样的债务,例如项目管理、团队管理、知识管理等,都有可能形成债务。
技术债务其实是无法彻底消除的,只要项目在持续迭代,业务还在运转,就一定会产生债务,重点是控制债务的规模,使其受控即可。
技术债是如何产生的?
按照 Kruchten、Nord 及 Ozkaya 的定义,技术债可以分为以下三类:
-
代码:难以维护或发展的临时代码。 -
架构:由软件开发过程中的架构决策造成的债务。 -
生产基础设施:为构建、测试和部署软件系统的基础设施和代码的决策。
![alt](https://i-blog.csdnimg.cn/blog_migrate/5e84b3cf02eb510fffef5e93870f9490.png)
MartinFowler 也提出了著名的TechnicalDebtQuadran,将技术债按照 鲁莽的(Reckless)/谨慎的(Prudent) 以及 故意的(Deliberate)/无心的(Inadvertent) 划分为四个象限。
由上述可见,技术债可能是有意为之,也可能是不知不觉中积累起来的。有时候项目开发周期太紧张,产品经理要求紧急上线新功能抢占市场,开发人员要求给很长的时间才能实现该功能,而一般管理者会认为这个时间太长。通常由于时间紧迫,实现当前的业务需求是第一优先级的,开发人员未对当前的方案做细致的分析,因此导致遗留了技术债。
技术债一般短期不会表现出明显的问题,但在项目长期迭代过程中,由于技术债不断的增加,系统的可维护性会直线下降,最终导致失控,从而给后续的产品开发带来了非常大的问题。
如何避免和解决技术债
出来混,迟早是要还的。技术债虽然无法完全避免,但是我们可以根据技术债产生的原因,来分析如何避免和解决技术债,通过强化实践来进行技术债治理。
1. 技术债解决日常化
研发团队对于架构的守护要像产品人员对待产品一样,架构健康和产品质量同样重要。在项目日常开发中,除了产品的业务需求外,应该规划一部分工作用于架构的优化,修复那些已知且有解决方案的技术债,这样才能持续保证软件系统的响应能力和产品质量。
2. 明确技术规范,加强管理
对于已知且无解决方案的问题,只是没有深入思考对系统的影响,一般这部分技术债产生的原因主要有两个:
-
团队没有技术规范标准,即便发现问题,也没有方案 -
缺少对架构修改的审查,开发人员自己思考解决方案,依赖个人经验
为了让这些技术债在产生前就避免,或者引导到可以快速解决的方向,团队需要建立相应的技术规范和标准,让每个决策都有依据。其次,加强流程上的管理,建立架构评审委员会,对架构的修改进行评审,一方面规避问题,另一方面根据问题完善规范和标准,从而帮助我们发现和避免一些新技术债的产生。
3. 持续关注技术发展趋势,提前规划架构的演进方向
随着技术的不断发展,很多几年前被认为非常先进的技术表现出了一些弊端,也逐渐在被新的技术替代。研发团队需要持续保持对技术发展趋势的关注,探索是否有更优的解决方案,在日常的开发和运维过程中,要做到以下几点:
-
明确当前团队的技术选型优势和问题,深入理解团队面临的问题 -
对于所选择的技术框架版本持续关注,定期升级到最新的稳定版本 -
关注新技术的趋势和动向,探索是否有更优的解决方案,新的技术是否经过成熟的验证,提前规划架构的演进方向
关注新技术不代表一味追求新技术,首先要明确现有的技术选型到底有哪些解决不了的问题,然后在选择新技术的时候思考它的弊端在哪里,是否有很大的影响。
4. 可视化
可视化是一个非常快速能帮助团队发现问题以及强调问题的最直接的办法,任何言语也无法媲美视觉的冲击。但要注意的事,技术债粒度可大可小,优先级也各有不同,并不是所有的技术债都需要立即修复,技术债的产生在某些情况下就是为了快速的追求产品的市场价值而存在的,需要不断的权衡。
团队需要将识别到技术债时及时可视化出来,判断技术债所处的象限,判定优先级,通过内部流程将技术债的状态进行转移,进而可以通过上面的方法进行解决。
5. 保持技术优化相关投入
这个建议更多是给团队的高层管理者,在激烈的市场竞争中,产品的开发可谓争分多秒,管理者们一定更愿意花钱在看得见的产品上。一旦技术框架基础已经奠定,会逐渐缩减在技术侧的投入,这其实也是大部分产品的软件系统技术债逐渐增多的一个非常重要的原因,产品的快速演进,进度的压力无疑是技术债产生的最大元凶。
为了保证产品持续的竞争力,上面几点只是方法,如果没有成本上的投入,只能沦为空谈。从整个产品团队,都要提升对技术的正确理解,技术的构建并不是一劳永逸的,是需要不断的成本投入来维护的。
总结
对技术债的治理是一项价值投资,软件开发要做时间的朋友,如果没有价值观上的坚守,是断然坚持不下去的。放任技术债会破坏团队,当累积到一定程度后,会限制业务的发展,研发效率、研发质量都会下滑。因此希望攻城狮们都重视起来,让我们可以继续愉快的编程!
本文由 mdnice 多平台发布