システム開発者の必読書「人月の神話」で語られる真実とは

このエントリーをはてなブックマークに追加
Facebook にシェア
Pocket
LINEで送る

「人月の神話」に出てくる「ブルックスの法則」をご存知ない人向けに簡単な説明を書いています。発注者側であろうが受注者側であろうが、これからシステム開発に関与する可能性がある方は是非ご一読ください。(ご存じの方は読む必要はありません。どうぞ読み飛ばしてください。)

ブルックスの法則

「人月の神話」という、ソフトウェア工学とソフトウェアプロジェクト管理について書かれた本があります。著者はフレデリック・ブルックスという人です。初版発行は1975年です。約40年前ですね。

IT業界に携わったことのある方なら、恐らくほとんどの方が耳にした事のある本だと思います。いろいろと示唆に富む本なのですが、このなかでも特に「うん、うん。そう、そう。」と頷いてしまうのは「ブルックスの法則」です。

ブルックスの法則:遅れているソフトウェア・プロジェクトに人員を投入しても、そのプロジェクトをさらに遅らせるだけである。

というものです。

火を吹いている開発の現場が「時間がない、人手が足りない」ということを主張すると、その上(のマネージャーなど)が本当に人を増やして対処しようとするのですが、これぞまさにブルックスの法則があてはまるシーンです。

「ブルックスの法則」というとなんだか大げさですが(J.ワインバーグもT.デマルコもそうですが、アチラのお国の方は「法則」が大好きですね・・・)、ごく当たり前の事を言っているにすぎません。システムの開発現場にちょっとでも浸かったことがあれば、感覚で理解していると思います。

ブルックスの法則の例

システム開発という特殊な事でなくとも、例えば定食をつくるというシーンにも通用します。以下、定食Aをつくるシーン例としてご説明します。

定食Aをつくる

定食Aが品目a、品目b、品目cで構成されており、どの品目も作るのに1時間かかるとします。この場合、定食Aをつくるために必要な工数は【3人時】となります。

定食A 所要時間 開始~終了
品目a 1人時(=1人×1時間)
品目b 1人時(=1人×1時間)
品目c 1人時(=1人×1時間)
【合計】 3人時

定食Aを1人でつくる

この定食Aを、平均的な腕前をもつ太郎さんが作るとします。料理開始は15:00だとします。すると、こうなります。

定食A 所要時間 開始~終了
品目a 1人時(=太郎さん×1時間) 15時~16時
品目b 1人時(=太郎さん×1時間) 16時~17時
品目c 1人時(=太郎さん×1時間) 17時~18時
【合計】 3人時 15時~18時

18時に完成ですね。

定食Aを3人でつくる

定食Aを18時に完成させたいが、料理開始できるのは17時から。という事情(制約)があった場合はどうすればよいでしょうか。太郎さん1人では料理が完成するのは20時になってしまいます。

システム開発プロジェクトならば納期に間に合わない、という事態です。ここで追加要員を投入するという発想がでてきます。

太郎さん1人でつくるとなると20時までかかってしまいますので、次郎さんと三郎さんに手伝ってもらうことにしました。

定食A 所要時間 開始~終了
品目a 1人時(=太郎さん×1時間) 17時~18時
品目b 1人時(=次郎さん×1時間) 17時~18時
品目c 1人時(=三郎さん×1時間) 17時~18時
【合計】 3人時 17時~18時

これで18時に間に合いました。

システム開発プロジェクトにおいて、厳しいスケジュールへの対応策として要員を追加するのは以上のような効果を期待しての事です。

しかし、現実はそううまくいきません。

次郎さん、三郎さんの腕前が太郎さんほどではなく、例えば、ほとんど料理をしない一人暮らしのサラリーマンと同じような腕前だったとすれば、1つの品目を料理し終わるのに1時間30分かかるかもしれません。手伝いに入ってもらった人たちが太郎さんと同じ生産性であるとは限りません。

また、次郎さん、三郎さんのそれぞれに、品目b、品目cの作り方を教えてあげなければなりません。その分の時間も必要です。教えることができるのが太郎さんだけだとしたら、もともとない時間がますます減ってしまいます。

更に、味(品質)についても、太郎さんと同等のレベルを確保できるかはわかりません。太郎さんやその他の人に品質をチェックしてもらう必要があるかもしれません。

それに、キッチンスペースが1人分しかなかったとしたら、同じ時間帯に3人がキッチンに立つことはできません。つまり、人を投入しても”待ち”状態が発生してしまいます。

定食Aを3人でつくる(その2)

上の例では、定食A=品目a+品目b+品目cでしたが、定食Aがひとつの料理で構成されているとしたらどうでしょうか。この場合でも定食Aを作るのに3人時かかるとします。

定食A 所要時間 開始~終了
工程a 1人時(=1人×1時間)
工程b 1人時(=1人×1時間)
工程c 1人時(=1人×1時間)
【合計】 3人時

このとき、工程aが終了しないと工程bを開始できず、工程bが終了しないと工程cを開始できないとします。例えば、工程aがじゃがいもの皮をむく、工程bがじゃがいもを一口サイズに切る、工程cが鍋で煮る、という具合です。

これだと腕前がいいとか悪いとかいう以前の問題です。太郎さんのほかに、次郎さん、三郎さんに手伝いにきてもらっても時間の短縮にはなりません。

定食A 所要時間 開始~終了
工程a 1人時(=太郎さん×1時間) 17時~18時
工程b 1人時(=次郎さん×1時間) 18時~19時
工程c 1人時(=三郎さん×1時間) 19時~20時
【合計】 3人時 17時~20時

以上のように、納期に間に合わせるために人を投入しても何の役に立たないケースというのは実際にあります。

人月の神話とは「人を増やせばいいというものではないよ」という話

他にも、人を増やせばオーバーヘッドも増えるという問題もあります。

例えば今回の料理の例で、「和風の味付けを、洋風の味付けに変えよう」と思い直した場合、太郎さん1人であれば頭の中で思うだけで済みます。

しかし、次郎さん、三郎さんを加えた三人体制となれば、まず「和風から洋風の味付けに変更する」という事を伝達しなければなりません。会社組織なら会議を開いて伝達するイメージです。

納期に間に合わない!といって人をかき集めてプロジェクトに投入しても、余計に遅れるのは、上記のようなことが起きているからです。

「人月の神話」とは人月(上の料理の例で「人時」)だけに着目し、人を追加してもリアルの世界では有効ではないよ(神話)という事を揶揄して言っています。

あるいは「人と月の物語(神話)」みたいでなんだかミステリアスですが、そのミステリアスの正体は「昔からわかりきった過ちなのに、やっぱり同じ過ちを犯してしまう」こととも言えるでしょう。

このエントリーをはてなブックマークに追加
Facebook にシェア
Pocket
LINEで送る

カテゴリーIT