2.3

2.3 流动速度与流动分布

概述与动机

流动速度是在给定周期内完成的流动项(主题 2.2)数量,是流动框架对吞吐量的衡量。流动分布是在同一周期内完成的项目中,各种流动项类型(功能、缺陷、风险与债务)所占的比例。这两个指标的设计初衷,就是要一起解读:速度单独回答”我们交付了多少”,分布单独回答”那是什么样的工作”,但少了另一个,任何一个问题都没有太大意义。一个团队可能一边提高速度,一边让分布悄悄地从功能转向缺陷返工,这在速度图表上看起来像加速,实则是质量下滑的症状。

这种配对,正是主题 1.2 对本书每一个指标家族所要求的同一门自律:绝不在没有护栏(显示那份速度付出了什么代价)的情况下报告速度数字。流动速度是本部分对吞吐量指标最直接的概括,在精神上更接近部署频率(主题 2.10),而不是本书中任何其他单一数字,但它以一种部署频率从未具备的方式,对项类型有所感知。部署频率告诉你代码到达生产环境的频率;而流动速度与分布配对,告诉你价值到达生产环境的频率,以及那是什么样的价值。

对运营着许多并行价值流的大团队而言,这种配对暴露出一种单一吞吐量数字完全掩盖的模式:一条价值流的速度看起来很健康,而其分布却已经悄悄漂向了几乎纯粹的功能工作,无声地剥夺了主题 2.2 警告需要刻意保护的债务与风险容量。比较各产品线吞吐量的企业组织,以及向监督机构报告交付产出的政府机构,都需要这种配对,才能避免把原始产出误认为真正、可持续的进步。

核心原则

  • 没有分布的速度,隐藏了实际交付的内容。 一个上升的项目计数,说明不了这个计数是健康的、被操纵的,还是悄悄偏向了最容易的可用工作。
  • 没有速度的分布,隐藏了规模。 一份看起来健康的百分比划分,如果你不知道它代表着多少总工作量,意义就不大。
  • 这两个指标必须始终一起报告。 这是主题 1.2 护栏配对原则对流动数据的直接应用。
  • 速度与任何项目计数指标一样,容易受到相同的替代操纵。 把困难的工作拆分成许多小而容易的项目,会抬高计数,却不会带来成比例更多的价值。
  • 健康的分布取决于情境,而不是一个固定的目标。 主题 2.2 对此有深入探讨;速度与分布应当始终对照情境所暗示的目标来解读。

建议

把流动速度报告为一条趋势线,绝不是单一周期的数字

单一周期的项目计数是嘈杂的,容易被误读。把流动速度画在数个连续周期上,关注趋势,而不是任何一个数据点,这正是主题 1.6 为任何容易自然波动的时间序列指标所推荐的同一门自律。

绝不在没有分布相伴的情况下呈现流动速度

把这当作对任何仪表盘或报告的一条硬性规则,而不是一个”有更好”的选项。单独展示的速度图表,恰恰招致本主题开篇所述的那种误读:一个实际上是返工份额上升、或容易的功能工作挤占了债务与风险容量的上升吞吐量。始终把两者放在同一个视图中。

当项目规模差异很大时,按规模或复杂度为速度加权

原始的项目计数,把一次单行配置变更与一次持续数周的架构迁移等同视之,这招致了本书已经为部署频率(主题 2.10)点名过的同一种替代操纵:把困难的工作拆分成许多小项目,会抬高计数,却不会带来成比例更多的交付。当项目规模差异很大时,按粗略的规模或复杂度估算为速度加权,或者把平均项目规模与原始计数一并跟踪,这样一个正在缩小的平均规模伴随着一个正在上升的计数就会变得可见,而不是被隐藏。

留意流动分布的漂移,而不只是它当前的快照

流动分布中最有用的信号,很少是这个周期的确切百分比;而是数个周期以来变化的方向。一种稳定的漂移(功能攀升,而债务与风险悄悄萎缩)值得在它变成主题 2.2 所警告的、在功能工厂模式下无形累积的质量或安全问题之前,就提出来与利益相关方讨论。

只在真正谨慎的情况下比较不同价值流之间的流动速度

两条项目粒度不同、团队规模不同,或产品阶段不同的价值流,仅凭原始速度并不能直接比较,这正是主题 2.10 为跨团队部署频率所点出的同一个公平性问题。先把速度用于一条价值流自身的趋势,只有在确认了真正可比的项目定义与粒度之后,才尝试跨价值流的比较。

权衡取舍:利与弊

方案优点缺点
仅原始项目计数速度计算与解释简单容易受替代操纵;隐藏了交付的是什么样的价值
速度与分布配对同时展示规模与价值组合需要有自律的流动项分类(主题 2.2)才有意义
按规模加权的速度抵御因项目规模拆分而来的替代操纵需要团队内一致、达成一致的规模评估方法
跨价值流速度比较对投资组合层面的投资决策有用若不确认真正可比的项目定义,很容易不公平

核心张力是简单性与抵御操纵的能力之间的张力。原始项目计数是最容易计算和解释的数字,但也是最容易通过把困难的工作拆成许多小块来抬高的数字。解决之道是保持主指标简单(原始速度与分布配对),把规模加权留给那些已知项目规模差异大到简单计数已经变得具有实际误导性的价值流。

与团队讨论的问题

  1. 当我们报告流动速度时,流动分布是否始终一同展示,还是速度有时会单独出现? 依据本主题自身的核心原则,一个没有分布相伴的速度数字,就是一幅不完整的图景。检查你实际的仪表盘和报告是否存在这个缺口。

  2. 我们的平均项目规模,是否曾随着速度上升而变化,我们会知道吗? 一个不断缩小的平均规模,伴随着一个不断上升的计数,正是替代操纵应用于流动项时的具体特征。拉出真实数据,而不要假定这种模式不存在。

  3. 我们是否曾在没有确认项目定义和粒度真正一致的情况下,就把自己的速度与另一个团队比较? 这里一次不公平的比较,可能给一个团队施加压力,使其为了显得可比而操纵自己的数字,这与本书已经为部署频率点出的风险如出一辙。

  4. 我们的流动分布在过去几个周期中,是否朝某一个方向漂移过,有没有人刻意决定过这件事? 一种缓慢的漂移,逐个周期看很容易被忽略。在假定当前的划分是稳定的之前,把数个周期画在一起,诚实地寻找一种趋势。

  5. 如果有人想在不做更多真实工作的情况下抬高我们的流动速度,最容易的方式是什么,我们目前的报告能抓住它吗? 走一遍把困难项目拆成容易项目的具体机制,讨论一下你的仪表盘是否真的能揭示这种模式。

  6. 我们的速度与分布数字,是否曾一起到达业务利益相关方手中,还是只有速度这个头条数字向上传递? 配对原则只有在数据的两半都真正被据此做决策的人看到时,才能起到防止误读的作用。

行业视角

初创公司。 在这个规模上,流动速度通常很容易非正式地跟踪,因为整个团队已经对吞吐量有一个大致的感觉。有用的自律,是即便非正式地也把它与分布配对,这样创始人就不会把一个上升的工单关闭计数误认为真正的功能进展,而实际上这个计数是由早期阶段的漏洞修复主导的。

小型企业。 用你已经用于流动项分类的任何轻量级工具(主题 2.2),一起跟踪速度与分布;在这个规模上不需要专门的分析平台。始终并排查看两者的习惯,比任何工具的复杂程度都重要。

企业。 在这个规模上,跨价值流的速度比较对投资组合层面的优先级排序很有吸引力,而这也正是公平性风险最大之处,因为不同产品线正当地拥有非常不同的项目粒度。在用速度比较来为团队之间的投资决策辩护之前,先投资于确认可比的定义。

政府。 相比单独的原始吞吐量,速度与分布配对能为公共部门技术领导者向监督机构报告交付产出提供一个强得多的证据基础,因为它不仅能展示交付了多少,还能展示这种组合反映了一种在新功能、缺陷修复与风险管理之间刻意、站得住脚的分配。

案例

企业。 一家软件供应商的平台团队,连续三个季度报告流动速度稳步上升,领导层将其庆祝为交付正在加速的趋势。一次更仔细的流动分布审视,是在一次客户对反复出现的漏洞升级投诉之后才被要求进行的,结果揭示,这个上升速度中”功能”的份额,实际上在同一时期从70%下降到了45%,缺陷修复项目填补了这个空缺。该团队一直在交付更多的项目,但其中新价值的比例却在萎缩;其余部分是速度图表单独展示时完全掩盖的返工。

政府。 一家国家统计局的数据平台团队,把流动速度作为其向监督委员会提交年度报告的主要交付指标。当一位委员会成员问及这份速度中有多大比例代表新的面向公众的能力时,该团队发现自己从未按流动项类型分解过这个数字,也无法直接回答。该机构随后采纳了速度与分布配对报告,这揭示出由一项新的数据保护法规驱动的风险与合规工作,正当地消耗了一份不断增长的容量份额,一旦明确展示出来,而不是留在一次无法解释的速度下滑背后,这种站得住脚的分配就得到了委员会的欣然接受。

商业理由:动机、投资回报与总拥有成本

把速度与分布配对的回报,是一份比单独任何一个数字都更诚实、更站得住脚的交付产出说明。上面的软件供应商案例,发现上升的速度实际上反映了下降的功能产出,正是这种配对所防止的那种误读,而及早抓住这种模式,远比等到一个面向客户的质量问题迫使问题浮出水面之后才发现,要便宜得多。

一旦流动项分类(主题 2.2)已经就绪,总拥有成本就极小:分布只是对已分类项目的一次直接汇总,而同时展示两个指标的自律,是一项报告惯例,而不是一项技术投资。本主题建议的大部分成本,早在组织最初采纳诚实的流动项分类时就已经支付过了。

反模式与陷阱

  • 报告流动速度而没有分布: 本主题核心的操纵向量。一个处于交付压力之下的团队,可以通过偏好小而容易的功能工作、避开更难的债务、风险或缺陷项目,或者把大项目拆成许多小项目来抬高项目计数,而单独展示的速度图表会被读成加速,而不是交付内容的实际转变。护栏是主题 1.2 在本书通篇所要求的同一门配对自律:绝不展示没有分布相伴的速度,并定期把平均项目规模与计数一并检查,以专门抓住拆分行为。
  • 比较项目粒度不同的价值流之间的速度: 产出一种不公平、具有误导性的比较。
  • 把单一周期的分布当作稳定的: 错过了只有趋势视图才能揭示的缓慢、有意义的漂移。
  • 只让速度这个头条数字到达业务利益相关方: 放弃了配对原则的全部保护价值。
  • 在庆祝上升速度的同时忽视平均项目规模: 错过了替代操纵的具体特征。
  • 设定一个不参照分布的速度目标: 恰恰招致本主题点名警告的那种操纵。

成熟度模型

  • 第一级,启动: 流动速度即便被跟踪,也是单独报告的,没有分布数据,也没有人检查过替代操纵。
  • 第二级,发展: 部分团队跟踪分布,但在报告中没有与速度一致地配对,也没有作为趋势被审查。
  • 第三级,标准化: 速度与分布始终一起报告,作为趋势被查看,并监控平均项目规模以抓住替代操纵。
  • 第四级,管理: 分布漂移在成为质量或安全问题之前就被主动调查,跨价值流的速度比较只有在确认了真正可比的项目定义之后才进行。
  • 第五级,协奏: 速度与分布直接为投资组合层面的投资决策提供依据,组织能够指出分布漂移在造成可见失败之前就被抓住并纠正的具体案例。

讨论思路

  1. 我们的流动速度报告是否始终包含分布,还是我们曾经只展示过其中一个?
  2. 我们的平均流动项规模最近是否随着速度的变化而变化过?
  3. 我们会知道我们的流动分布在过去几个季度里是否发生了稳定的漂移吗?
  4. 要在不交付更多真实价值的情况下抬高我们的速度,需要什么,我们会察觉吗?

要点回顾

  • 流动速度衡量吞吐量;流动分布衡量这份吞吐量代表着什么样的工作。始终一起报告它们。
  • 这种配对是主题 1.2护栏原则的直接应用:绝不在没有代价背景的情况下展示速度数字。
  • 本主题核心的操纵向量是单独报告速度,这可能掩盖了向容易功能工作的转移,或项目拆分抬高了计数却没有带来成比例的价值。
  • 分布漂移在数个周期的趋势中最为可见,而不是在任何单一周期的快照中。
  • 跨价值流的速度比较需要真正可比的项目定义才算公平;否则,它们带来的误导多于信息。

参考文献与延伸阅读

  • Kersten, Mik. Project to Product: How to Survive and Thrive in the Age of Digital Disruption with the Flow Framework. IT Revolution Press, 2018.
  • Forsgren, Nicole, Jez Humble, and Gene Kim. Accelerate: The Science of Lean Software and DevOps. IT Revolution Press, 2018.
  • Vacanti, Daniel S. Actionable Agile Metrics for Predictability. Actionable Agile Press, 2015.