什么是技术债
交付第一次代码就像陷入债务。 债务是可以加快开发速度,只有通过重写代码,及时偿还债务。如果不偿还债务,就会发生危险。 把时间花在写一些不正确的代码上的每一分钟都算作该债务的利息。 整个软件项目可能在未合并代码的部署,面向对象设计或其他方面的债务问题而陷入停顿。 —— Ward Cunningham(沃德·坎宁安)
它跟金融债务非常的相似,一个人或者组织为了快速发展向金融机构贷款,代价就是除还本还得加上利息。如果他有能力定期还款,那么他欠下的债务是可以接受,不会产生进一步的问题,如果不还款或者逾期还款,就会以利息作为惩罚,随着不还款次数增加,罚息也随之增加,那么就可能由于债务累积造成破产。
从可见性角度分析技术债务的范围,比如说缺陷和未实现的功能特性均不能称为技术债务,因为它们显性影响软件产品价值,一般均能得到快速的解决;技术债务是不可见的部分,比如说不合理的架构设计,代码质量不佳和缺少测试或者文档。缺陷往往是技术债务的症状。
影响
巨大的技术债务影响了软件开发团队的生产效率,并降低他们的士气和积极性。技术债务不断累积导致了恶性循环:巨大的技术债务降低了生产效率和团队的士气 ; 同时低生产效率使得管理者推出更多的功能并导致技术债务问题的延期,而这又进一步增加了技术债务。
为什么会有技术债?
通常引入技术债务是为在更短的时间交付软件产品,从而在架构,代码,测试和文档上做出妥协,从而让软件产品尽早的接触用户,获取反馈。这样做最大好处就是让软件产品快速跑起来,而不是更完美的设计和文档。毕竟用户要看到的可使用的软件产品,他们对里面的设计或者质量毫不关心,这一点对于面对C端用户开发的产品更是如此,时间就是生命,早一点面世就可能在市场上活下来,活下来才能有下一步的空间。
常见的技术债
不良的架构选择,过度复杂的代码和缺少代码文档是三个最常见的技术债务类型。
产品复杂性和代码复杂性之间的gap有多大,基本上就是技术债和不合理性有多大
如何管理技术债
通常情况下,团队在已经积累了大量的技术债务的项目中工作。在这种情况下,忽视债务前进是不明智的,因为它可能会导致该项目技术破产。在另一方面,停止数个月不开发新功能转而只专注于偿还技术债务也是不可行和不实用的。在这些情况下,需要均衡的发展模式,稳步偿还债务,并尽可能地保持功能和软件的实用性的进度。