おすすめの工数見積もり方法についてのお話です。
(前置き)ストーリーポイントと相対見積もりについて
本題の前に相対見積もりとストーリーポイントについて少し触れましょう。
私は人日/人月などの絶対見積もりは使わず、相対見積もりによってストーリーポイントをつけています。
ストーリーポイントは、ユーザーストーリーやフィーチャーの規模感を表す単位です。
そして、基準となるユーザーストーリーのストーリーポイントに対して、どれくらい大きい/小さいかを見積もるのが相対見積もりです。
本エントリの見積もり単位もストーリーポイントを使用して説明します。
2点見積もりとは
「最小工数」と「最大工数」の2つを算出して見積もる方法のことです。
見積もるプロジェクト規模が大きい、あるいは不確定要素があるという時に効果を発揮するでしょう。
hirokidaichi さんの記事に、2点見積もりのことがさらに詳しくまとまっているので、是非一読ください。
qiita.com
それでは、どうやって見積もるかを具体的に説明します。
1点見積もり
まず、普段よく目にするのは下記のような1点見積もりです。
タスク名 |
sp(ストーリーポイント) |
タスクA |
5 |
タスクB |
3 |
タスクC |
13 |
合計 |
21 |
これには、個々人の尺度で見積もられており、リスクやバッファも含めたストーリーポイントになっていることでしょう。
とりわけ、見積もりは大きくなればなるほど不確実になります。
「タスクCは、本当に13なのか」、「もっと多いのではないか」──。この判断は、非常に難しいものです。
2点見積もり
対して、2点見積もりは「順調に進行した工数」、「遅延した工数」、そして「不安量」を用います。
- sp順調: 順調に進行した場合のストーリーポイント
- sp遅延: 最大限に遅延した場合のストーリーポイント
- 不安量:
=(sp遅延-(sp順調とsp遅延の平均))^2
タスク名 |
sp順調 |
sp遅延 |
不安量 |
タスクA |
3 |
5 |
1 |
タスクB |
2 |
5 |
2.25 |
タスクC |
13 |
34 |
110.25 |
合計 |
18 |
44 |
113.5 |
上記のタスクCを例にすると、順調に進めば13 、遅延すると34と見積もっています。
もちろん、もっと遅延する可能性があれば55と入力することもあるでしょう。
2点見積もりでは、sp順調とsp遅延を入力することで、バッファ量を算出できます。
算出したバッファ量を順調spに足すことで、最終的な工数を算出するという仕組みです。
※バッファ量をスプレッドシートで算出する場合は、 SQRT関数
で平方根を算出できます。
例に挙げたプロジェクトの場合、 18+SQRT(113.5)≒29sp
が工数になり、1点見積もりより7sp多くなりました。
これにより、1点見積もりの方が楽観的見積もりになっていたことがわかりました。
なお、順調と遅延の差が大きければ大きいほど、不安量が積まれバッファ量に反映されることになります。
何がいいのか
1点見積もりの場合、不確実な見積もりに対して確実な値を入れることになり、悩みが付き纏います。
前提となる要求が定まっていない場合、その悩みは大きくなるでしょう。
「この想定だとすぐ完了するが、もしかすると全然想定が違うかもしれない。そうなると21かな──。」
見積もりの際に、このようなことを繰り返している方も多いのではないでしょうか。
そして、1タスク毎の微妙なズレが見積もり全体を破綻させるのです。
不確実性のコーンが示すとおり、「初期コンセプト」段階の見積もりは、0.25~4倍ほど乖離することもあるでしょう。
プロジェクトのフェーズによっては、見積もりの精度を突き詰めても価値ある見積もりはできません。
2点見積もりを用いた場合、最小と最大を取るのである程度ざっくりと見積もることができます。
最小と最大の差が開くと「不安量」が大きくなり、その分だけバッファが積まれることになります。
これにより:
- 見積もりという不確実なもので悩む時間を削減できる
- 悲観的見積もり、楽観的見積もりの偏りが少ない
- 不安量が多いタスクの洗い出しができる
さいごに
不確実性のコーンを考えると、開発する前に正確な見積もりはできません。見積もりに対する注力する価値はどれほどになるでしょうか。
少しでも確実な見積もりにしていくためには、不安量の高いタスクから着手していくことで、見積もりをブラッシュアップしていくと良いでしょう。
エンジニアのためのマネジメント入門
『エンジニアのためのマネジメント入門』という本を執筆したので、こちらも併せてご覧いただけると嬉しい限りです。