什么是WIP(work in progress)限制?

在敏捷开发中,在制品(WIP)限制设置了工作流程中每个状态上可以存在的最大工作量。通过限制WIP可以更容易地识别团队工作流程中的低效率环节。在情况变得严峻之前,团队交付管道中的瓶颈清晰可见。


为什么WIP限制很重要?

WIP限制看上去会阻碍您的工作进程。事实结果是,恰恰相反。

WIP限制通过迫使团队专注于一组较小的任务来提高吞吐量并减少“看似完成但尚未真正完成”的工作。从根本上说,WIP限制鼓励“完成”的文化。更重要的是,WIP限制使阻碍和瓶颈清晰可见。当有明确的迹象表明现有工作导致瓶颈时,团队可以围绕阻塞问题来理解、实施和解决这些问题。一旦障碍被消除,整个团队的工作就会重新开始流动。这些好处保证了价值增量更快地交付给客户,这让WIP限制成为敏捷开发中的一个有重大价值的工具。  

此外,并行处理多个任务不能达到节约时间的效果。

在开发过程中,很容易想到“哦,我会在开始处理另一个问题时暂停处理这个问题”。同时处理两个问题意味着在两个不同的事物之间切换场景或需要在队友之间转交工作。暂停一个任务并开启另一个任务是有代价的——这需要时间并且会降低注意力。解决最初的问题几乎总是比开始新的工作要好。换句话说,WIP限制防止了我们在流程中引入新的障碍。 

最后,WIP限制指出了长期闲置或超负荷的环节。他们帮助团队看到整个过程中的低效率环境,而不仅仅是他们工作的某个领域。

提示:

对于刚接触WIP限制的团队,他们会感到不熟练。在最初的阶段需要花更多时间讨论。了解团队达到WIP限制的原因和场景。抵制一开始就随意调整它们的诱惑。如果经常触发限制,则表明WIP限制过于严格或团队的流程效率低下。 

对敏捷团队使用WIP限制

如果您已经认同WIP的价值,那么就开始用它来解决问题。

在推出新的工作流程时,做出团队决定以确定每个状态的WIP限制。我们建议在监控几周后,对每个状态下的平均工作项数设置WIP限制。以下是典型软件开发团队使用的具有WIP限制的示例敏捷板。

 

上图中,代码审查设置了WIP限制。由于该列已超出其限制,因此背景已变为红色。

在完成列,允许出现大量的任务,因此不需要WIP限制。在上面的板上,“待办”表示故事已经过Product Owner和团队的全面审查。开发团队在开始工作项时将工作从“待办”拉到“处理中”。作为最佳实践,将足够的工作保持在“待办”状态非常重要,这样开发团队的每个成员都可以得到充分利用。通过在“待办”状态下保留适量的任务,Product Owner在录入需求时不会想得太远,产品也能更灵敏地应对变化。

“处理中”状态列出了正在积极开发的工作。在这种情况下,WIP限制的目标是确保每个人都有工作要做,但没有人同时处理多项任务。比如,“处理中”任务数量的限制是 4,目前有3个任务处于该状态。这告诉团队他们有能力承担更多工作。作为最佳实践,团队可以将最大WIP限制设置为低于团队成员的数量。这个想法是为良好的敏捷实践留出空间。如果开发人员完成了一个任务,但团队已经达到他们的WIP限制,他们知道是时候处理一些代码审查或跟另一个开发人员进行一些结对编程了。

“代码审查”状态表示已经完成编码但需要在合并到代码库之前进行审查的任务。及时的代码审查是建立质量、更快地将创新推向市场、通过减少开放分支使合并更容易以及在工程团队中传播知识的最佳实践。出于以下几个原因,应紧急处理处于这种状态的项目:

  • 当团队成员提交新代码时,及时检查代码不会引入问题
  • 开发人员还保留着编写原始代码时环境
  • 该功能可以尽快合并到主分支中进行发布

WIP限制保证未审查的代码不会堆积。

请注意,在上面的敏捷板中,团队有太多的代码审查,因此该列已变为红色来突出这一点。

需要注意的例外情况:

  • WIP限制会根据需要提高,让团队不会再达到这些限制。
  • 每个人都有一项庞大的“后台任务”,可以利用成员的空闲时间。
  • 没有瓶颈出现,并且团队成员出现了无所事事的情况。
  • 投入了太多的时间,持续处理瓶颈问题,需要考虑改进工程实践或团队流程。 


使用WIP限制的敏捷团队的4个目标

像任何新活动一样,WIP限制起初可能会让人感到不熟悉。这里的目标适用于优化中期团队,前期的不熟悉其实是好事。这导致团队在他们的过程中感受到一些痛点。在团队使用他们的WIP限制几周后,根据需要进行调整。抵制仅仅因为团队不断达到它而调高WIP限制的诱惑。抓住这个机会来提高能力——理想情况下,通过教育团队并为每个成员提供新的技能组合,或使开发过程的某些方面更有效率。

目标1: 始终如一地调整各个任务的大小。在分解需求和用户故事时,将单个任务的工作时间控制在不超过16小时非常重要。这样做可以提高团队自信地估计的能力 ,并有助于防止出现瓶颈。显然,大型工作项,更容易阻塞管道,更容易减慢团队速度,更容易触发WIP限制。 

提示:

当WIP限制对团队起作用时,问题的周期时间将会减少。周期时间是完成一个问题所需的时间。查看我们关于敏捷指标的页面,以了解更多信息。 

目标2: 将WIP限制映射到团队的技能。上面的示例假设团队成员具有相似的技能组合。如果您的团队有专家参与,则当专家参与时,WIP限制可能会有所不同。为专家的工作创建一个特定的状态。如果在该状态下出现瓶颈,请利用这个机会教育其他团队成员为专家的技能组合增加额外的能力,并增加整个团队的流动性。

目标3: 减少闲置。当团队成员有一些空闲时间时,鼓励他们帮助上游或下游团队成员。他们将为团队的整体生产力做出贡献,并在此过程中学到一些东西!

目标4: 保护可持续的工程文化。WIP限制并不意味着开发人员需要匆忙完成工作以避免在特定状态下工作超负荷。它们旨在支持可靠的敏捷工程实践,以保护产品质量和代码库的健康。