今まで数々のプロジェクトマネージャーとそのプロジェクトマネージメント手法に翻弄されてきたが、現在の勤め先であるベルリンのITスタートアップで取り入れている手法が歴代の中でも一番マシ。まず工数見積がとても洗練されている。エンジニアが無理やりに「今週中に完成させます!」と言わされて、結局はその約束が守りきれずに翻弄される、というような弊害が最小化できているな、という話。
プロジェクトマネージメントチームのメンバー達はその見積方法を「フィボナッチ」と表現している。
だいたい工数見積なんてものが正確にできる人に出会ったことが無い。複雑なITプロジェクトの全体像を把握して「これをうちのチームで完了するためには**日を要する」なんてピタッと当てたためしがない。絶対にズレる。
エンジニアに向かって「お前さー『今週中に完成させます』って言ったよな?誰だっけ、それ言ったの?オレじゃねーよ。お前だよ。おめーのその口が『今週中』って言ったんだよ。もう金曜の夜だぜ。どーすんの?どーすんだよ!」とツメてもプロジェクトは1歩も進まない。
逆に「エンジニア様、いつもコード書いていただいてありがとうございます!」と持ち上げても一緒。
ムチでしばいてもアメをぶら下げても、論理的根拠が無い限り工数見積なんてうまくいく訳がない。
こういうことを書くと「だからウォーターフォールはダメ。時代はアジャイルだよ」と言う人が居るけど、私が関わったプロジェクトは全てアジャイルだった。2週間ぐらいの小さな開発プロセスをぐるぐる回していくアレ。アジャイルであっても工数見積は必要だし、PMチームと開発チームの間の認識違いによる言い争いと、大幅な見積もり誤差は絶えなかった。
そこでフィボナッチ工数見積である。
フィボナッチ工数見積の方法
大前提として見積もりミーティングは開発者とPMチーム全員参加。ダラダラするとすごい時間の無駄なのでルーチン化してチャッチャと終わらせる。何度かやると「いつもやってることだし」となって20分から30分ぐらいで終わる。
【1】 実装したい機能をできるだけ細かい単位に切り出して、タスクチケットとして発行する
例:Twitter認証によるユーザー登録機能
【2】バックエンドもしくはフロントエンドなどのタグを付ける。バックエンドとフロントエンドの両方に実装が必要な場合はチケットを2つ用意して、それぞれのタグを付ける。
例:Twitter認証によるユーザー登録機能ーバックエンド、 Twitter認証によるユーザー登録機能ーフロントエンド
【3】全員でそれぞれのチケットに対しての必要工数をフィボナッチ数列でポイントを付ける
2、3、5、8、13、21の数列を使って、最も工数のかかりそうなチケットに21ポイントを、最も少ない工数のチケットに1ポイントをつける。
【4】チケットを優先順位順に並べる。手順3で付けたポイント数とは別に「どれが先に実装されるべき機能か」を基準とした優先順位。
【5】優先順位の上位から最初の開発スプリント(2週間)で完了しそうな分量だけを取り出す。
チーム人数にもよるがだいたい10から20チケットとか。
【6】取り出したチケットを各担当者に割り振る。その後ひたすら開発する。
【7】バグフィックスが出るたびにチケットを発行し、そこにフィボナッチ数のポイントを見積もって付ける。
【8】2週間のスプリントが終わったら、終了したチケットの合計ポイントを数える。
そこで終わってないチケットとその担当者を批判しない。ただ数える。
【9】1に戻って同じ手順を繰り返す。2週間のスプリントが終わったら、また終了したチケットの合計ポイントを数える。
これを何度も繰り返すとそのチームが2週間で処理できる平均速度がポイント数で出る。これがまーまー正確な値になっている。どんなに気合いれて開発してもいきなり速度が2倍になったりしない。
またここで言う平均速度のポイント数とは100ポイントとかの単位であり、決して100人月という意味ではない。そのポイント数はチーム全員で上記の手順を踏んだ上での数値となる。「わがチームが見積もるわがチームの開発スピードポイントです」としか言いようがなく、これが驚くほど正確なのだ。
かなり正確に開発スピードの予想ができるので、投資家に「それっていつごろリリース予定?」と聞かれても今の会社ではまーまー論理的に返答できているようだ。
最初はこれがどれぐらい画期的なアイデアかは気づかなかったが、何度も実践するうちに分かってきたことがいくつかある。
工数を時間や日数で表現しないからこそ出せる正確性
もしチケットに対して「1日でできる仕事だ」とか「3日はかかる仕事」というように日数で表すと、余計な邪念が入って不正確な見積もりになってしまう。見積もりのミーティングは正確性が最も重要なのにどうしてもエゴが入ってしまう。
エンジニアA「これは重いタスクですから4日はかかりますね」
エンジニアB「なに?4日?こんなの1日で十分だろ(オレならできるぜアピール)」
エンジニアA「いえいえ、このタスクの実装に**も含んでいることを考慮に入れてますか?前回Bさんが似たような箇所を実装された時に4日以上かかってましたよ」
エンジニアA「は?テメー喧嘩売ってんのか?」
PM「まーまーここは両方の顔を立てて1日ということで。AさんもBさんも優秀なので1日で十分ですよね」
エンジニアA、B「はい。。。」
これを5とか13という単位の無い数字にすることで余計な邪念を挟む余地が無くなる。単なるポイントであって単位が無いので他との相関で決めるしかなくなる。「あのタスクを5って言ったんなら、これはもうちょっと軽い目だから3かな?」という具合だ。しかもこの時点で誰が担当するかは割り振られてないので、前述のAとBのように「オレだったら*日でできるぜ」などと無駄なアピールをさせなくて住む。
フィボナッチで重いタスクの差を明確に
ポイント数にする場合に1,2,3,..8、9、10と連続した数字ではなくフィボナッチ数列にしているのには理由がある。まず実務においてタスクの重さは指数関数的に伸びていくこと。軽量なタスクはそれほど差はないが重量なタスクにはモノによって大きな差が出ることはエンジニアなら経験則でご理解いただけるはず。
また重くなるにしたがって差を大きくすることでその差をより意識するように仕向けるため。軽いタスクの場合、2や3の差は小さく多少の誤差が出ても大きな影響は無い。見積もりの重要性は重いタスクほどにある。そこで「重いタスクを9かな?それとも10かな?」とじっくり考えても9と10の差は1でしかでなく、9と10の差を意識するのが難しくなる。
ここをフィボナッチにすることで13と21の差はとても大きく、「あれが21だったらこれは13にすべきだろ」と、より明確に区別することが可能になる。
個人が処理したタスク数を人事評価に結び付けない。
これは重要。工数見積は全てプロジェクトの推進のためであって、人事評価のためにやっている訳ではない。ここに人事評価を結びつけると、ポイント稼ぎのためにやたら軽いタスクに重いポイント数を乗せて、またそのチケットを取り合ったりとロクなことが無い。
以上がフィボナッチ工数見積の概要。
なんか偉そうに紹介してしまったが、特にPM手法に詳しい訳でも専門知識がある訳でもない。全ては同僚のスペイン人プロジェクトマネージャーRの言ってることの受け売り。
そもそもこのような工数見積は誰もが知っている常識なのか、あまり普及していない特殊な手法なのかすらよく知らない。
Rのバイブルというか超おすすめの本としてAgile Estimating and Planningをいつも紹介されている。
私の正直な感想としては「エンジニアがそんな本を読まなくてもいいように会社はテメーを雇ってるんじゃないの?」だ。
まーとにかくおすすめらしい。
Agile Estimating and Planning (Robert C. Martin Series)
- 作者: Mike Cohn
- 出版社/メーカー: Prentice Hall
- 発売日: 2005/11/01
- メディア: ペーパーバック
- クリック: 8回
- この商品を含むブログ (13件) を見る
アマゾン.comのレビューでもやたら高評価なのできっといい本なのだろう。
日本語版ならこちら。
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~
- 作者: Mike Cohn,マイクコーン,安井力,角谷信太郎
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2009/01/29
- メディア: 単行本(ソフトカバー)
- 購入: 74人 クリック: 764回
- この商品を含むブログ (226件) を見る
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com
tango-ruby.hatenablog.com