Help us understand the problem. What is going on with this article?

2点見積もりと作業バッファの計算方法「SRSS法」のイメージ

More than 1 year has passed since last update.

タスクの工数を見積もる際に、タスク自体が確定していないから、見積もりにくいことがあります。

こういう時、その不確定さも含めて見積もってしまい、作業バッファとして積むという技があります。(勝手に2点見積もりと呼んでいます)
少しまとめておきます。

ちなみに、見積もりの単位はストーリーポイントでも人日でも関係なく使える話です。

平均時間と最悪時間

勘でタスクごとに2つの見積もり数字を出します。

  1. 「平均的に終わらせるとしたら」の時間
  2. 「ハマったりして時間がかかったとしたら」の時間

なお、(2)は「明日、地球に隕石が落下して世界が滅びたらどうしよう」みたいな、常識的に考えると起こり得ないことまでは考慮しません。想定できる範囲で、「悪いことが重なったらどうしよう」と考えてください。

イメージとして、50%と90%を念頭においてください。

  1. 50% ぐらい、もしかしたらオーバーするかも
  2. 90% まあ確実に終わるだろう

作業バッファを積みすぎる問題

不確実なので、作業バッファを考えなければいけません。

ここで、タスクは複数あり、並列ではなく直列にやっていくものとします。
例えば作業者が1人しかいないとか、タスクに依存関係があって前のタスクが終わらないと次のタスクが出来ない、みたいなイメージです。

単純なのは、(2)の90%見積もりを全部足してしまうことですが…

最悪5のタスクが3つで合計15。これは妥当でしょうか?

image.png

仮に、50% - 90%の見積もりが正しいとしましょう。(正しいと信じて勘で出しているはずです)
そうすると、確率的に50%見積もりの通りに終わるタスクもきっとあるでしょう。その分のバッファは必要ないはずです。

15は悲観的すぎな気がしますね。

そこで妥当なバッファを計算するやり方に、SRSS法というものがあります。

SRSS法 (対角線の長さを使う)

Square Root of Sum of Squares、直訳すると 二乗和平方根で、計算方法をそのまま書いた名前です。個人的にはイメージを覚えるために勝手に 対角線法 というあだ名を付けています。

それぞれのタスクで出した最悪と平均の差を、2乗して足し合わせ、最後に正の平方根を取ります。これが妥当なバッファ期間とします。単位的に細かくなくていいなら、小数点は切り上げると良いでしょう。

image.png

最悪時間を足しただけの 15 よりも、少しアグレッシブに 13 になりました。
これでも多分、大丈夫なはずです。

なんで対角線??

SRSS法は長方形や立方体の対角線の長さの計算方法と同じ公式です。なのでイメージが付きやすくて勝手に対角線法と呼んでいます。(他に呼んでる人に会ったことがないので世間的には通じません)

例えばタスクが2つで(最悪 - 平均)が3と4だったら、バッファは $\sqrt{3^2 + 4^2 }$ で5になりますが、これは3x4の長方形の対角線の長さを出してるのと同じです。

image.png

同じイメージで、(最悪 - 平均)の差分が1のタスクが3つあったとしたら、バッファは $\sqrt{1^2 + 1^2 + 1^2}$ で1.73205...ですが、これも1x1x1の立方体の対角線の計算式と同じです。

image.png

タスク4つだと4次元になってしまうので超直方体とかになってイメージできなくなりますが。。。まあ、イメージの話なので気にしないでください。

対角線の長さはバッファ期間として妥当なの?

いきなり計算方法を示されても妥当かどうか掴めないと思うので、感覚的な説明をしましょう。

タスクが2つの時、バッファはタスクの不確実さを隣り合う2辺にして、長方形を描いたときの対角線の長さです。

三角形の性質でもありますが、対角線は それぞれのタスクの不確実さより必ず長くなります
例えば1個、すごく不安で100ぐらい50%と90%で差のあるタスクがあったとして、計算されるバッファは100以上になります。

$\sqrt{100^2 + n^2} >= 100$

これは重要な性質ですね。

また、50%と90%で差がない場合、つまり タスクの不確実さがゼロの場合は、そのタスクはバッファに影響を与えません。
例えば不安なタスクが1個しかないなら、そのタスクの最悪時間までだけバッファとして積んでおけばよいのです。

$\sqrt{0^2 + n^2} = \sqrt{n^2} = n$

不確実さ1の タスクが増えると、じわじわとバッファも増えていきます

$\sqrt{1^2 + 1^2} < \sqrt{1^2 + 1^2 + 1^2} < \sqrt{1^2 + 1^2 + 1^2 + 1^2} < \sqrt{1^2 + 1^2 + 1^2 + 1^2 + 1^2}$

切り上げ方式だと、不確実さ1のタスクが増えるごとにこんな感じですね。

  • 1個 → バッファ1
  • 2個 → バッファ2
  • 3個 → バッファ2
  • 4個 → バッファ2
  • 5個 → バッファ3

この増え方も何となく、直感的な気がしますがどうでしょうか。

まとめ

勘ベースの手法ですが、そんなに手間がかからないので、作業バッファの決め方としてオススメです。
もちろん、もっと雑にx1.5とかでバッファを見積もってもいいのですが、それっぽい計算方法が欲しい方は参考にしてみてください。

参考文献

Hiraku
PHP, Go界隈をうろうろしています。最近はgRPCと戦ってる。 特に明示していなければ、記事中のソースコード片は `CC-0 1.0` とします。出典表示無しで自由にコピペして頂いて構いません。 ただ、記事自体をコピペされるのは嫌なので、ソースコード部分以外の文章は通常通り全ての著作権を私が保持するものとします。 引用を超える範囲のコピペは止めて下さい。
http://blog.tojiru.net/
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away