作者 | Aiko Klostermann
译者 | 平川
策划 | 施尧
不管我们知不知道,代码库中多半都有技术债务!而且用的时间越长,问题就越多。
摘要
不管我们知不知道,代码库中多半都有技术债务!而且用的时间越长,问题就越多。所以我们要把它们处理掉。但是我们从哪里开始呢?技术债务的实物表示很重要,让你不至于忘记它们。对技术债务进行分类,可以帮助你正确地确定优先级。把重点放在这样的技术债务上,消除它们可以提供很大的价值,同时又不需要付出太多的努力。
正文
本文最初发布于 Aiko Klostermann 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。
不管我们知不知道,代码库中多半都有技术债务!而且用的时间越长,问题就越多。所以我们要把它们处理掉。但是我们从哪里开始呢? 
那么,什么是技术债务?
让我们看看 Martin Fowler 是怎么说的:
技术债务是 Ward Cunningham 提出的一个很好的比喻,用来帮助我们思考这个问题。在这个比喻中,用快速而粗糙的方式做事会给我们带来技术债务,这类似于金融债务。和金融债务一样,技术债务也需要支付利息,由于快速而粗糙的设计选择,我们在未来的开发中必须付出额外的努力。我们可以选择继续支付利息,也可以通过将快速而粗糙的设计重构为更好的设计来降低本金。虽然偿还本金要付出代价,但我们未来可以通过减少利息支付而获得收益。
感兴趣的话,可以点击文末阅读全文。
在特定的时间内,我们可能需要创造一些技术债务。毕竟,它让我们可以专注于“更重要的”事情。我们由衷地同意,一旦手头的工作少了,我们有时间了,就会把它们处理掉。
然而,故意增加代码库的技术债务,并承诺以把它处理掉只是第一步。可悲的是:由于另一个即将到来的截止日期,或者是不断到来或变更的需求,我们可能不再考虑债务。
因此,有必要将技术债务可视化,以便我们知道有哪些债务需要处理,并在失去控制之前把它们解决掉。
虽然上图所示的方法可以确保我们不会忘记自己的技术债务,但很难找到志愿者。
一般来说,有些方法在记忆方面比其他方法有优势。
因为我们都是技术专家,所以首先想到的就是把它放到网上,以便所有团队成员都可以查看。
但让我们面对现实吧:在一个虚拟空间里收集债务只是一种让我们忘掉它的方法。它会隐藏在项目管理工具的某个页面上,而我们再也不会看它了。
我们需要实物的板子来展示债务!
既然已经意识到了我们的技术债务,那么是时候把它处理掉了。但如何确定优先级呢?
接下来,我们将探讨两种不同的技术债务分类和可视化方法,这将使我们的团队更容易确定消除债务的优先级,然后决定集中往哪个方向努力。
技术债务矩阵
(受 Eisenwhower Matrix 启发)
有些类型的技术债务很容易消除,只需要付出很少的努力。而其他类型的债务与系统的许多组件存在关联,需要大量的努力才能消除。
与此同时,有一些技术债务如果消除了对我们的开发过程和正在开发的产品有很大的价值,而有一些技术债务的消除则没有多大价值。
对这些因素有一个清晰的认识可以帮助我们确定消除债务的优先级。
在上图中,技术债务是根据上面提到的两个标准来摆放的,分为 4 个象限。
将来,当我们决定创建一些新的技术债务或在系统中发现了新的债务时,我们只需要拿一张便利贴(作为一个敏捷开发团队,便利贴应该到处都是),在上面写下技术债务的描述,并根据消除难度和价值将其放在适当的位置上。
在左下象限,消除科技债务的成本很高,而且价值不大。我们最初的努力不应该集中在这些技术债务上。
左上象限和右下象限比较好。这些债务,要么很容易移除,要么很有价值,但相应地,价值会低一些,或者成本会高一些。
最明显的赢家是右上象限。事实上,由于通常大多数图表的右上角是“最佳”象限,所以为了让这个矩阵更符合通常的体验,我们有意识地选择 x 轴为 ease 而不是 effort
消除这个象限的技术债务对开发过程非常有价值,而且只需要付出很少的努力。我们不仅可以先摘到容易摘到的果实,而且还能识别出最有价值的果实。经典的双赢。
技术债务树
软件开发的世界充满了隐喻,有时是为了让概念更易于掌握,有时只是给它们起个朗朗上口的名字。我们谈论工厂模式、混乱的猴子(Chaos Monkeys)、垃圾收集,我们谈论病毒如何感染我们的电脑,以及防火墙如何保护我们免受病毒的侵害。在软件开发中,我最喜欢的一个隐喻是童子军规则(Scouting Rule)。甚至技术债务本身也是一种隐喻。
所以,让我们把这个隐喻思维带入技术债务的可视化。 
继续这个容易摘到的水果的隐喻:树最下面的便利贴代表了很容易就可以解决的技术债务。挂得更高的便利贴是更困难的任务,需要付出更多的努力。
现在,在消除技术债务的难度方面,我们有了与上述象限表示相同的区分。缺少的是对其价值的可视化。
这就是便利贴大小发挥作用的地方了。就像从树上摘一个大苹果比摘一个小苹果让你的努力可以获得更多的营养价值一样:便利贴的大小代表了消除这部分债务的价值。
此外,不同大小的便利贴提供了一个有洞察力的整体表示,让人一眼就可以看出有多少技术债务存在。便利贴占的区域越大,开发进度就越慢。
不管是喜欢更具有分析性的可视化,还是更有趣的可视化,我们现在都可以开始在迭代计划中消除技术债务了。
小结
  • 技术债务的实物表示很重要,让你不至于忘记它们。
  • 对技术债务进行分类,可以帮助你正确地确定优先级。
  • 把重点放在这样的技术债务上,消除它们可以提供很大的价值,同时又不需要付出太多的努力。
原文链接:
https://aiko.dev/visualising-and-prioritizing-technical-debt/
你也「在看」吗?👇
继续阅读
阅读原文