如何偿付技术债务

Paul Tevis的团队在四个月前开始使用Scrum。 该项目拥有大量技术债务,他正在努力解决如何跟踪和偿付技术债务的问题。 Tevis写到:

我关心的问题是:(1)我们一开始跟踪非故事的任务,就无法集中于交付客户的价值;(2)如果我们不让这些任务可见,那么就无法以需要的速度取得进展。 对于解决不是直接与故事相关(或者涉及到多个故事)的技术债务,你有什么好的模式吗?

什么是技术债务? Ward Cunningham创造了“技术债务”这个词,它指的是组织为了达到短期的目标,而降低代码质量时所造成的债务。 想要重新提高代码质量,马上解决会很容易,而做的越晚,成本就越高。 额外的成本就是技术债务的“利息”。

Malcolm Anderson创建了一个案例,它与特定情况下的技术债务相关:

之所以使用短期的技术债务,会有很多种原因。 让我使用利息率为36%的信用卡作为比喻。 你不想使用那个卡。 但是,当拥有很大的业务合理性的时候,你就会在短期的情况下使用那个卡。

但是Adam Sroka反对说:

如果你想要做出业务决定,至少要知道:
  1. 我会花费多少?
  2. 会产生多少利息? 会经过多长时间?
  3. 我是否有足够的收入来偿付?
当团队自发地采用技术债务的时候,甚至很少有人(如果有的话)知道以上任何一个问题的答案。

不管这是否是个好主意,在Tevis的案例中,债务已经发生了。 那么我们如何才能在项目中减少已经存在的技术债务呢?

Roy Morien为如何偿付技术债务的问题提供了两种可能的解决方案:

你真的需要做出这么困难的选择吗? 我想,如果你的“技术”开发需求那么重要,那么大,或者那么多,那么暂停面向用户的开发是否是可行的呢?那样你可以把那些技术问题理清并清理掉。

或者,是否可以重新分配一些开发者来解决这些技术问题,同时团队中其它人员会继续开发面向用户的内容。 这可能会影响团队的效率,但那又怎么样呢?

然而,Ron Jeffries并 不同意这两个方法:

当技术问题是由故事驱动的时候,处理它才会最有效。 代码库可能到处都需要处理,但是只有在因为面向用户的原因工作的代码才需要偿付技术债务。 如果某些糟糕的代码没有涉及到任何故事,那么对它所做的工作就是很大程度上的浪费。

因此,我更喜欢像平时那样(但可能很少会那样)采用故事的方法,并且遵循“童子军军规”,在离开营地时让它比我们找到时更干净。 也就是说,在故事引领我们到达的地方,让我们编写更多的测试,并更积极地进行更多的重构。

这个方法至少拥有以下优点:

  • 保持故事“最敏感”的流程;
  • 发动所有团队智慧来提供帮助;
  • 让整个团队知道如何保持代码整洁;
  • 专注于对需要的地方进行改善;
  • 不浪费精力在可能需要的改善上;

... 以及更多。

而“banshee858”提供了下面的建议(他最初信任Tobias Mayer),这与Jeffries的方法非常吻合:

在很小的便利贴上列举所有技术债务,并把它们贴到任务板上。 当为Sprint选择产品Backlog项目(PBI)的时候,看一下各个技术债务,并找到处理PBI的同时可以合理完成的那些项目。 把它们添加到PBI的工作范围之内,并估计需要多长时间才能完成特性和技术债务内容。

使用这种方式,你就可以看到技术债务方面的工作,并且能够区分出优先次序,与真正的价值关联起来。

查看英文原文: How To Pay Down Technical Debt

你可能感兴趣的:(如何偿付技术债务)