The Clean Coder ch10 Estimation
Estimation
What Is an Estimate?
- ビジネスサイド: 確約ととらえがち
- プログラマ: 推定のつもり
- この違いは重大
A Commitment
- プロは実現可能なことしかコミットメントしない
- コミットメントしたからには、12時間働いてでも、週末働いてでも、家族をないがしろにしてでも、守る
- 実現できるか不確かなことのコミットメントを頼まれたら、道義上断るべき
- コミットメントを守れないのは、明らかなウソと大差ないくらいタチが悪い
- コミットメントは「確実」
- 他の人はそのコミットメントに基づいて計画を立てている
An Estimate
- 見積もりは「推定」
- コミットメントではない
- (コミットメントではなく)見積もりを行う理由は、どれだけかかるかわからないから
- 見積もりは単一の数値ではなく、分布である
- 例
- 50-60%の確度で3日で終わる
- 95%の確度で6日以内
- まずないが、何もかもうまくいかないと、10日,11日とかかるかも
- 例
- ビジネスサイドは、悲観側の裾野を気にする
- 見積もりを行う側も当然心配すべきこと
Implied Commitments
- 「長くとも6日で終わるように努力(try)してくれる?」
- tryってどういう意味?
- 8時間以上働く
- 週末働く
- 家族旅行をつぶす
- さもないと、締切に間に合わなかった場合、非難される
- 「努力してないじゃないか」(not trying hard)
- プロはEstimateとCommitmentの間に明確な線引きをする
- 暗黙のコミットメントをのまないよう、最新の注意を払う
- 上司が適切にプランニングできるよう、見積もり分布を可能な限り明確にする
PERT
- trivariate analysis
- 3つの見積もり値を出す
- O: Optimistic
- 全部うまくいったときの値
- 起こる見込み1%未満であること
- 例: 1日
- N: Nominal
- 確率-日数グラフで、確率が最大の日数
- 例: 3日
- P: Pessimistic
- ここにおいて、期待値は次の式で記述される:
μ = (O + 4N + P) / 6
- 例の数値を当てはめると(1 + 4*3 + 12) / 6 = 4.2
- いくぶん悲観寄りになる
- 分布関数の右側の裾野が長いから
- 標準偏差は次の式:
σ = (P - O) / 6
- 数値を当てはめると(1 - 12) / 6 = 1.8
- まとめると:
- 5日で終わりそう
- 6日(+1σ)、ないし8日(+2σ)かかる可能性もある
- 複数のプロジェクトを抱えていたら?
タスク | O | N | P | μ | σ |
---|---|---|---|---|---|
A | 1 | 3 | 12 | 4.2 | 1.8 |
B | 1 | 1.5 | 14 | 3.5 | 2.2 |
C | 3 | 6.25 | 11 | 6.5 | 1.3 |
- 期待値: 単純に足せばいい (14.2日)
- 標準偏差: 二乗和の平方根 (3.13日)
- まとめると:
- 14日で終わりそう
- 17日(+1σ),ないし20日(+2σ)かかる可能性もある
- Oを足して「5日」とか、Nを足して「10日」と見積もってしまうの怖くない?
Estimating Tasks
- 周りの人と一緒に見積もろう
Wideband Delphi
- 共通することは、チームで合意をとること
Flying Fingers
- 困難や複雑性に基づいて、タスクを見積もる
- 机の下で見積もり日数だけ指を立てて、一斉に見せ合う
- 一斉に見せ合うのは、他の人の指を見て見積もりを変えてしまわないように
- 3本と4本がちらほら、とかは「合意」
- 「みんな4本だけれど一人だけ1本」とかは、議論してすり合わせる
Planning Poker
- flying fingersとだいたいおなじ
- 数値の選び方いろいろ
- フィボナッチ数列派
- ?と無限大を入れる派
- ボブおじ: 0,1,3,5,10
Affinity Estimation
- タスクをカードに書き出して、ランダムに並べる
- 言葉を発さずに、黙々とタスクカードを重さ順に並び変えていく
- 何度も移動されたカードは議論の対象として脇に置いておく
- 並べ替えが収束したら、議論スタート
- 並び順について意見が合わなかったカード(何度も移動されたカード)について議論する
Trivariate Estimates
- 3種類見積もろう
- Planning Pokerだったら
- Pを皆で出し合って高点取り
- Oを皆で出し合って低点取り
The Law of Large Numbers
- 見積もりは誤差をはらんでいる
- だから「見積もり」
- 誤差を小さくするために、大数の法則を使おう
- 大きな1つのタスクよりも、小さな複数のタスクのほうが誤差が小さく正確に見積もれる
- 誤差がキャンセルアウトするから
- 大きな1つのタスクよりも、小さな複数のタスクのほうが誤差が小さく正確に見積もれる
- とはいえこれは楽観的
- 過大に見積もってしまうよりも過小に見積もってしまうことのほうが多い
- ので、誤差は完全にはキャンセルアウトされない
- タスクの細分化により、理解の助け・意外性の発見にはなる
Conclusion
- ビジネス上のプランニングのために見積もりを出す
- 見積もりとコミットメントとは異なる
- 実現できるか不確かなコミットメントはしない