ベロシティが安定しないのは異常ではありません。平均ではなく幅で計画に使う方法
前のスプリントは24ポイント、その前は15ポイント、今回は19ポイント。数字が毎回動くので、次のスプリントに何ポイント積めばいいのか分からない。ベロシティを計画に使おうとすると、ここで止まります。
この記事では、ベロシティが動くこと自体をどう扱えばいいのかを整理し、平均を追いかけずに計画へ組み込む方法を扱います。原因を探すべきときと、探しても意味がないときの区別も含めます。
「安定しない」と感じているとき、実際に何が起きているか
まず前提を1つ確認します。ベロシティは、チームが1スプリントで完成させた作業量の実績値です。予測に使うための材料であって、達成すべき目標ではありません。
この前提が崩れると、数字が動くこと自体が問題に見えてきます。実際には、動かないベロシティのほうが珍しい状態です。スプリントごとに扱う作業の中身が違い、休暇や割り込みも同じではないので、まったく同じ数字になるほうが不自然です。
問題は数字が動くことではなく、動く数字をどう計画に使うかが決まっていないことです。ここを分けて考えないと、安定させること自体が目的になります。
平均を上げようとすると何が起きるか
よく試されるのは、平均値を目標として扱う方法です。「直近の平均が20だから、今回も20を目指す」という使い方です。
短期的には機能します。ただし、数字を目標にすると、数字のほうが動きます。見積もりを大きめに付ける、完成の定義を緩める、テストを次スプリントに送るといった調整が入り始めます。どれも意図的な不正ではなく、目標を満たそうとすれば自然に起きる調整です。
結果として、ベロシティは安定して見えるようになり、同時に予測の材料としての価値を失います。ここが最も避けたい状態です。安定していない数字より、実態と切れた安定した数字のほうが厄介です。
同じことは、チーム間でベロシティを比較したときにも起こります。ポイントの基準はチームごとに違うので、数字を並べても能力の比較にはなりません。比較が始まると、基準を揃えるのではなく数字を大きくする力が働きます。他チームと並べた表が作られている場合は、その表の目的を早めに確認しておくほうが安全です。
ばらつきには2種類ある
ここで、製造業の品質管理で使われてきた考え方が役に立ちます。どんな作業にも本来のばらつきがあり、その範囲内の上下には特定の原因がないという見方です。
この見方では、ばらつきを2種類に分けます。
- 本来の幅の中の変動: いつもの作業をいつもどおりに進めていても生じる上下。個別の原因はない
- 幅の外に出た変動: 通常とは違う何かが起きたことを示す上下。原因を特定できる
スクラムに置き換えると、直近の実績が15から24の間で動いているチームにとって、19も22も「いつもの範囲」です。ここで原因を探しても、それらしい理由は後から必ず見つかりますが、次に活きる情報にはなりません。
この見方はプロセス管理から借りたもので、スクラムのために作られた理論ではありません。持ち込めるのは、ばらつきには原因を持つものと持たないものがある、という区別までです。ベロシティは人が付けた見積もりの合計なので、工業製品の寸法ほどきれいには振る舞いません。
それでも1つだけ実用的な示唆があります。上下の一つひとつに理由を求めるのをやめることです。レトロスペクティブで毎回「今回はなぜ低かったのか」を議論しているなら、その時間の多くは何も生んでいません。
平均ではなく幅で計画する
具体的な手順です。直近5スプリント程度の実績を並べ、平均ではなく最小値と最大値を見ます。
たとえば実績が15、24、19、17、22だったとします。このチームの幅は15から24です。この幅を次のように使い分けます。
| 用途 | 使う値 | 理由 |
|---|---|---|
| スプリントで確約する範囲 | 最小値に近い値(15前後) | 下振れしても守れる約束にする |
| スプリントに用意する作業 | 最大値に近い値(24前後) | 上振れしたときに手が空かないようにする |
| 数スプリント先の見通し | 幅のまま伝える(15〜24) | 単一の数字で伝えると、それが約束として扱われる |
3つ目が実務では効きます。ステークホルダーに「1スプリント20ポイントです」と伝えると、その数字が固定の能力として扱われます。「15から24の間で動きます」と幅で伝えておけば、下振れした回に説明を求められる回数が減ります。
幅で伝えることに抵抗されることもあります。その場合は、過去の実績をそのまま並べて見せるのが早い方法です。数字の並びを見れば、単一の値で表せないことは説明しなくても伝わります。
確約する量を最小値寄りにすると、スプリントが早く終わる回が出てきます。ここで空いた時間に追加の作業を入れるかどうかは、チームで先に決めておくのが現実的です。毎回埋めていると、結局は最大値が新しい基準になり、幅を使う意味がなくなります。
改善やリファクタリング、次のスプリントの準備に充てる回を作ると、最小値のほうが上がってきます。幅が狭まっているかは、数スプリント後に最小値と最大値をもう一度出せば分かります。
原因を探すべきとき
幅の中の上下は放置してよい、という話をしました。では、いつ原因を探すべきかの基準を決めておきます。次のいずれかに当てはまるときです。
- 過去の幅を明らかに超えた値が出た(最小値を大きく下回る、最大値を大きく上回る)
- 幅の中でも、3スプリント以上続けて下がり続けている
- チームの構成、扱う技術領域、完成の定義のいずれかが変わった
3つ目は数字を見る前から分かるものです。人が入れ替わった直後のスプリントは、過去の実績と比べる意味がありません。この場合は幅の計算をいったん捨てて、数スプリントかけて作り直します。
逆に、これらに当てはまらない上下は、レトロスペクティブの議題から外す手があります。次のスプリントの行動が変わらないためです。
原因を探すと決めたときは、数字ではなく出来事を見ます。そのスプリントに何が起きたかを時系列で並べ、いつもと違った出来事を特定する進め方です。ベロシティの数字そのものを見つめても、何も出てきません。
この方法が使えない場合
前提として、少なくとも3スプリント分、できれば5スプリント分の実績が必要です。始めたばかりのチームには幅がまだありません。この場合は、ベロシティを計画の材料にすること自体を数スプリント先送りするほうが確実です。
もう1つ、見積もりの基準が回ごとに揺れている場合も、幅を出しても意味がありません。同じ規模の作業に3ポイントと8ポイントが付くようなら、先に基準を揃える必要があります。過去に完成した作業をいくつか並べ、それを基準点として使う方法が現実的です。
明日からの一歩
直近5スプリントの実績を並べ、最小値と最大値を出してください。それだけで、次のスプリントで確約する量と用意する量が決まります。
そのうえで、次のレトロスペクティブでは「今回のベロシティがなぜこの数字だったか」を議題に載せない回を作ってみる手があります。幅の中に収まっているなら、その議論から得られるものはほとんどありません。空いた時間は、幅そのものを狭める話(作業の分割や依存の減らし方)に使うほうが実りがあります。