本篇文章4031字,读完约10分钟

编者按:这篇文章的翻译已经被授权。原文:技术债务:还款计划,链接:http://www.infoq/articles/tech-debt-repayment这篇文章最初发表在infoq微信公众账户上,标识:infoq China。转载请联系微信:infoqzone。

许多团队都被技术债务所困扰,但是很少有人能够真正设计出一个计划并从中挣脱出来。为了更好地理解如何摆脱技术债务,我们不妨用金融债务作为类比,帮助你正确理解什么是技术债务。

1.什么是技术债务?技术债务是由团队为了短期项目利益而故意做出的糟糕的技术决策造成的。例如,为了更快地将产品推向市场,团队可能不会像面对一段困难的代码一样编写深入的自动化测试。或者,他们可能决定基于一个很快就会过时的框架来构建一个项目,而不是花钱购买该框架的升级和更好的服务支持版本。不管决策是什么,关键是要认识到真正的技术债务是团队为了获得短期利益而故意做出的会招致长期债务的决策。

技术团队 你欠了一屁股债你造吗?

这意味着许多我们通常认为是“技术债务”的东西实际上根本不是债务。例如,随着系统使用寿命的增加,团队将无法始终保持最佳的编码实践。在这种情况下,“点点”是正常的,而不是债务。或者,团队自愿做出的技术决策在随后实现时被发现是不正确的,这不是技术债务。

无论如何,团队并没有为了获得短期利益而故意做出糟糕的长期决策。这种差异非常重要,因为只有当我们就技术债务的构成达成一致时,我们才能就如何减少技术债务做出最佳决定。考虑我们无意中引入代码库的债务的影响也很重要。然而,由于这种债务不是故意承担的,我们无法事先计划如何解决。在这种情况下,我们必须优先解决这种债务...就像团队解决新发现的bug一样。

技术团队 你欠了一屁股债你造吗?

2.一个恰当的金融比喻我们经常把技术债务和金融债务进行比较。但是这是一个等效的类比吗?例如,如果我们不首先决定何时以及如何偿还,银行真的会借钱给我们吗?可能不会。既然我们不能在没有首先描述如何偿还债务的情况下借入金融资本,我们就不应该这样对待技术资本。这个金融比喻真的非常有效,所以我们将更充分地讨论它。

技术团队 你欠了一屁股债你造吗?

3.实施严格的还款计划就像金融债务一样,在谈论技术债务时,我们需要确定两件事:如何偿还债务和何时偿还债务。

如何偿还债务?让我们以放弃自动化测试为例。如果我们的团队自愿决定放弃为困难的代码段编写自动化测试,以便尽快将一个函数投入生产,那么我们需要决定如何纠正这种债务。在这种情况下,我们只需要表明我们将在将来的某个时候返回到这段代码,然后添加测试。

然而,简单地说“我们稍后将添加测试”并不能合理地解决这个问题。为了帮助利益相关者真正理解我们的决策对招致技术债务的影响有多大,我们需要尽最大努力来准确解释以后添加自动化测试的影响。例如,我们应该指出测试中需要添加的代码段。我们还需要弄清楚,在现有代码段中添加自动测试总是比在创建代码段时直接添加测试更困难,成本也更高。最后一点非常重要,因为它清楚地指出,如果我们把这项工作推迟到以后,实际上我们会比现在直接完成这项工作花费更多的钱。换句话说,……债务会产生利息。

技术团队 你欠了一屁股债你造吗?

在讨论了补偿方法之后,团队及其涉众可能会意识到这个问题比他们在编写代码时是否应该编写自动化测试更复杂。事实上,他们可能会发现在这两个极端之间,他们确实有各种更适合整个项目的选择。例如,他们可能认为用“圈复杂度”这样的指标来识别新特性中最复杂的部分是非常有意义的,并立即添加测试来涵盖这些方面,同时推迟较简单的部分。或者,他们可能决定更简单但价值较低的自动化测试类型,如单元测试,可以立即添加,但更困难的自动化测试,如自动化用户验收测试,可以推迟到未来的冲刺阶段。无论做出什么样的决定,团队和它的利益相关者都不太可能做出决定,因为他们没有在第一时间讨论技术债务。

技术团队 你欠了一屁股债你造吗?

债务何时偿还?除了指明如何偿还债务,我们还想指明何时偿还债务。一般来说,你越早还债越好。因此,最好在债务发生时安排好债务偿还工作,以便更好地传达承担债务的影响。例如,如果你的团队遵循一个由冲刺组成的时间表,那么你可以选择为下一次冲刺安排你的工作,或者,在最坏的情况下,不超过几次未来的冲刺。通常,团队有最好的愿望,也就是在债务出现时偿还债务,但他们似乎从来没有时间这样做。当你想摆脱债务时,在日历上写下还款的最后期限,并坚持按时完成。

技术团队 你欠了一屁股债你造吗?

4.避免违约的诱惑我们财务比喻的最后一部分是找出如果我们选择违约会发生什么。在金融领域,如果我从来不还汽车贷款,银行会把我的车开走。还应该明确指出拖欠技术债务的后果。让我们继续自动化测试的例子。如果团队决定不偿还技术债务,基于现有的未经测试的功能构建新的功能只会使其更加困难和昂贵。在生产环境中,我们可能会看到更多的错误报告,这意味着客户可能会对我们的产品质量有不好的印象。我们快速应对市场变化的能力也会被削弱,因为我们的大部分产品要么很难快速修改,要么快速修改的风险太高。所有上述要点都需要向利益相关者说明,以帮助我们避免技术性债务违约的诱惑。

技术团队 你欠了一屁股债你造吗?

5、受先进的困扰——摆脱位衰减

到目前为止,我们所有的讨论都集中在计划中的技术债务上,也就是说,作为正常项目的一部分,团队故意产生的债务。如果我们不讨论计划外的技术债务,我们就会失职,因为它们也困扰着许多项目:比特衰减。如前所述,比特衰减不是我们故意造成的,我们不能提前决定如何以及何时偿还它。从这个意义上说,它不同于普通的技术债务。

技术团队 你欠了一屁股债你造吗?

然而,虽然我们不能确切地知道比特衰减在我们的项目中的表现形式,但这并不意味着我们不能计划它。正如我们在计划偿还已知技术的债务时所做的那样,我们也可以在项目计划中添加一个缓冲区来处理每一次冲刺中的比特衰减。虽然填充这个缓冲区的具体任务在那时可能还不知道,但是那里有这样一个缓冲区,所以我们有一个特殊的空,它可以处理计划外的问题,比如bug、必须立即处理的小规模重构,或者我们称之为代码库自然老化和衰减的小规模系统维护。

技术团队 你欠了一屁股债你造吗?

然而,对于那些在几个小时的开发时间内无法解决的大问题,我们该怎么办?可能有更多的系统性问题困扰着我们,例如基础设施故障或老化的架构不再能满足业务需求。因为这些问题太大了,不容易解决,所以我们可以用这个缓冲区来识别和研究这些问题,以便我们在后续的项目中给予应有的重视。例如,在基础设施出现故障的情况下,也许我们可以识别出基础设施中经常出现故障的部分,这样我们就可以在待办事项列表中添加事件来替换这些部分。然后,我们将优先考虑正常开发,并相应地安排故事。

技术团队 你欠了一屁股债你造吗?

或者,当架构老化时,我们可以花一些时间来确定我们可以动态地对架构进行哪些最有价值的更改,然后将这些更改分解成可以在未来冲刺阶段处理的故事。不管问题是什么,有时间识别问题并制定计划意味着它可以像任何其他技术问题一样得到解决。

6.扩大到预算既然我们对技术债务的影响有了更好的理解,我们如何才能真正确保技术债务的偿还?为了对此有一个感官上的理解,我们把上面的金融比喻延伸到另一个方向……预算。我们中的许多人每隔几周就挣一份固定的工资。这份工资是年薪的一部分,全年平均分配。例如,如果我们一年能挣52,000美元,我们可能每两周收到2,000美元……也就是说,一年26次。然而,虽然按照规定,我们每次可以拿到2000美元的工资,但是我们不可能把它全部存入我们的活期账户。相反,我们更有可能将其中的一部分存入一个经常账户,其余的用于长期投资或偿还债务。例如,我们最初有一笔2,000美元的存款,预算明细实际上可能如下所示:

技术团队 你欠了一屁股债你造吗?

500美元用于长期投资,例如,200美元存入退休账户以偿还短期债务,300美元存入信用卡以偿还长期债务,250美元直接从抵押贷款或汽车贷款中扣除,其余750美元存入活期账户。现在,虽然没有人对这种安排感到特别兴奋,但基本上没有人对此表示怀疑。在某种程度上,这只是一个公认的准则。既然这种安排被广泛接受,为什么不把它扩展到我们的项目计划中呢?想象一下,我们正在计划一个故事点的冲刺,我们已经为这个冲刺分配了50个故事点。虽然我们希望把全部50点用于新开发,但实际上,最合理的方法是安排一些点用于偿还技术债务。例如,对于最初的50点,我们可能决定安排:

技术团队 你欠了一屁股债你造吗?

10分用于偿还技术债务,5分用于不间断的代码库维护,如错误修复或位衰减,35分用于新开发。看看我们的点预算,我们可以看到它与我们前面描述的财务预算有一些明显的相似之处。虽然我们在每一次冲刺中都有50个点,但并不是所有这些点都被用于新的开发。更准确地说,我们必须用其中的10个点来偿还我们故意招致的技术债务,就像我们用我们的部分工资来偿还我们的长期和短期债务一样。此外,我们完全使用5分来进行不间断的代码库维护,就像我们将每个工资的一部分用于税收一样,以帮助维护我们社区的正常运行。其余的是我们自己的,可以根据我们的意愿用于任何新的开发。正如剩余的钱存在一个活期账户中一样,我们可以根据自己的意愿自由支配它。

技术团队 你欠了一屁股债你造吗?

通过工作预算,我们可以确保我们的项目继续前进,而不是让它在技术债务的重压下崩溃。当然,就像个人预算一样,这种预算也会有一些偏差。例如,如果我们偿还技术债务的速度快于预期,那么我们将有一些剩余的故事用于新功能的开发。同样,如果我们发现我们承担了大量的技术债务,我们可能需要稍微放慢新功能的开发速度,直到技术债务的数量回到一个更可控的水平。

技术团队 你欠了一屁股债你造吗?

7.摘要:以金融债务为类比来考虑技术债务,我们可以对技术债务何时发生有一个更明智的判断,这有利于项目的改进。在项目过程中,我们可以更好地计划试图偿还债务的影响。与此同时,通过在日常工作中计划日常预算,我们可以更好地理解什么时候我们的债务是可控的,什么时候它会使我们负担过重。

原文作者:infoq技术媒体,如有转载,请注明出处:http://36kr/p/5044076

“读完这篇文章还不够吗?如果你也开始创业,希望你的项目被报道,请点击这里告诉我们!”

标题:技术团队 你欠了一屁股债你造吗?

地址:http://www.j4f2.com/ydbxw/5368.html