技术负债就好比修改和扩展软件系统,每当添加新功能时,需要付出的额外努力就好像是债务利息一样。那么身为技术开发者,该如何偿还技术负债?
一、什么是技术负债?
技术负债,是指由于某些限制,做出的一种短期见效快,长期有伤害的,在技术层面的决定,无法完全地实施计划好的各项功能,理想实施完成状态和实际实施结果之间的差异。
技术负债有时候并不完全是指这个代码有多糟糕,而更有可能是强调这个代码带来的持续增长的成本,即技术负债的利息——后续研发和运营因为不完善的系统实施而需要付出的额外努力。举个例子,如果前期的实施不包括运营管理平台,所有后期的运营都要手工操作,这在效率上大打折扣,需要招聘额外的人手。
现实生活中,很多潜在的问题,在项目初期很难被发现,很多问题都是在实践的过程中发现的,敏捷开发,有利于解决类似的问题。但是越到后期,和技术负债相关的请求,就会越难被接受,因为他们的投入产出比小,风险大。更糟糕的情况是,有一些东西,是需要事后的消化,后知后觉的,这无异是得不偿失的。
二、技术负债有哪些负面影响?
如果公司要解决技术负债,花费的成本往往是很高的。在所调研的系统中,35%的技术债务已经严重影响了系统的支持和维护,它们可能导致安全、性能问题甚至威胁到正常运行。
三、技术债如何偿还?
债总要还的,解铃还须系铃人。还债的方式有很多,下面的方法做个抛砖引玉。
1、好的设计和架构
对项目当下需求以及未来的需求能够做一个预见,避免随着项目复杂度提升导致后期重构的风险。遵从基本设计原则:模块化,轻耦合,无状态。选择合适的技术而不是最好的技术。
2、Code Review
Code Review是一个只要超过俩人的TD团队就建议采用的工序。Code Review很重要,千万不要以时间或者其他原因放弃Code Review。Code Review工作可以在开始就将可能产生的债务清理掉。如果你能全款,为什么要选择贷款呢?
3、测试保证
增加自动化测试覆盖率,通过自动化测试覆盖住流程,减少漏测的几率,并为后期偿还债务时可能需要的重构提供保障。测试,越是无情,越是仔细,全面的测试,越是有助于系统的健壮。
4、定期的技术债务偿还
和项目经理或者产品经理协商一个迭代或者趁迭代的空隙,专门用于解决前期积累的技术债务。一方面可以清理债务,另一方面可以是开发人员得到一定程度的放松。
将积累的技术债务按照优先级就行排序,将最需要解决的债务分配一些到迭代之中,提前偿还。相当于等额本金。
0技术债是一种完美的情况,但也不必追求“无债”状态,因为那样太难了,也不太经济,人无完人;尽量减少技术债,使其不至于明显影响后续产品和开发。