ブルックスの法則とは、遅れているソフトウェア開発に人を増やすと、かえって完了が遠のくことがある、という経験則です。新しく加わる人が戦力になるまで時間がかかり、説明やすり合わせも増えるためです。
以下では、ブルックスの法則の意味、背景、起きやすい場面、現場で取りやすい対策の順に整理します。
ブルックスの法則とは、遅れているソフトウェア開発に人を足すと、かえって完了が遅れることがあるという経験則です。この考え方は、Fred Brooks(フレデリック・P・ブルックス)が著書『The Mythical Man-Month』で示したものとして広く知られています。
ブルックスの法則は、次のように表されます。
遅れているソフトウェアプロジェクトに人員を追加すると、プロジェクトの完了がさらに遅れる。
この法則が示しているのは、人数を増やしても、そのぶん進みが速くなるとは限らないということです。新しく入る人への説明や、チーム内のすり合わせが増えるため、全体の速度が一時的に落ちることがあります。
大事なのは、ブルックスの法則が「人を増やすな」と言っているわけではない点です。遅れた場面で人を足すときは、教育や調整の負担まで見込まないと、かえって遅れが広がりやすい、という注意として読む必要があります。
この考え方の土台には、ブルックスが IBM の OS/360 開発で得た経験があります。予定から遅れた案件に人を足しても、すぐには立て直せず、むしろ完了が遠のく場面があったためです。
ブルックスは、この現象の主な要因として、たとえば次の点を挙げています。
ソフトウェア開発は、単に仕事量を人数で割れば終わるものではありません。仕様の前提、コードの癖、テストの進め方など、文書だけでは伝わりにくい知識が多く、これを共有する時間がどうしても必要になります。
ブルックスの法則が示しているのは、次のような点です。
こうした点を先に見ておくと、遅れた場面での判断を誤りにくくなります。
ブルックスの法則がもともと想定しているのは、ソフトウェア開発のように作業の切り分けと共有が難しい仕事です。他分野でも似た現象が起きることはありますが、それは「調整の負担が大きい場面では同じような遅れが起きやすい」という意味で捉える必要があります。以下は、その例です。
| 分野 | 起こりうること |
|---|---|
| 建設 | 工期が遅れた現場で人を増やすと、連絡や安全面の確認が増える |
| 新製品の開発 | 人を足しても、仕様合わせや試作の手間が増えることがある |
| 研究 | 期限が迫った段階で人が増えると、前提合わせの時間が重くなる |
ただし、分野が違えば事情も違います。建設や製造のように役割を分けやすい仕事では、人を増やすことがそのまま効く場面もあります。逆に、設計の見直しや工程どうしの待ち時間が大きい場面では、ソフトウェア開発と似た形で遅れが広がりやすくなります。
ブルックスの法則が示しているのは、「人を足したのに、なぜ進みが速くならないのか」という現場の難しさです。ここでは、起きやすい問題を順に整理します。
新しいメンバーが加わると、チーム内の連絡はそれだけ増えます。情報を渡す時間、認識をそろえる時間、相談に答える時間が増えるため、もともと作業していた人の手が止まりやすくなります。
具体的には、次のような「見えにくい仕事」が増えます。
連絡そのものは必要ですが、遅れた場面では、その負担を吸収する余裕が小さくなっています。そのため、進みの鈍さが表に出やすくなります。
新しく入る人が案件の背景や仕組みを理解するまでには時間がかかります。その間は、教える側の時間も必要です。新しく入る人がまだ十分に動けず、今いる人の手も教育で削られるため、しばらくは全体の速度が落ちやすくなります。
立ち上がりに時間がかかるのは、文書が足りないからだけではありません。なぜその設計にしたのか、どこで不具合が出やすいのか、運用では何を守るのか、といった知識は、紙だけでは伝わりにくいからです。
人数が増えるほど、役割の分け方と、あとでつなぎ直す手間は重くなります。新しく入る人の役目を決め、今ある作業とのつながりを保つ必要があるためです。
とくにソフトウェア開発では、並行で進められそうに見えても、実際には前後のつながりが強いことが少なくありません。仕様がまだ固まっていない段階で人を増やすと、あとで仕様が変わったときの直しが広がりやすくなります。
人を増やしたときの負担は、案件の終盤ほど重くなりがちです。終盤は、新しく作ることより、つなぎ合わせること、テストすること、壊れていないか確かめることが中心になるからです。
この段階で人を増やすと、変更点が増え、テストする範囲も広がり、レビューと確認が詰まりやすくなります。その結果、遅れを縮めるつもりの増員が、かえって遅れを広げることがあります。
ブルックスの法則は万能ではありませんが、次の条件が重なると起きやすくなります。
逆に言えば、作業を切り出しやすく、教える時間も短く、別の詰まりが主因なら、増員が効く余地はあります。次章では、その見方と対策を整理します。
ブルックスの法則が示す問題を抑えるには、増員するかどうかだけでなく、遅れの原因をどう見るかが重要です。ここでは、現場で取りやすい対策を順に整理します。
人を足す前に、まず遅れた理由を分けて見る必要があります。初期の見積りが甘かったのか、仕様がまだ決まっていないのか、テストやレビューが詰まっているのかで、打ち手が変わるからです。
たとえば、次のように整理します。
原因がレビュー待ちなら、人を増やしても解決しません。仕様が固まっていないなら、増員は直しを増やすだけになりやすいです。まず原因を見分けることが先です。
案件を進めやすくするには、作業を分け、その範囲ごとの責任をはっきりさせることが有効です。人を増やす場合も、どこまでを任せるのかが曖昧だと、連絡の回数だけが増えます。
ここでいうモジュール化は、ファイルを分けることではありません。直しが出たときに、影響が広がる範囲を小さくする考え方です。たとえば、次のような進め方が役に立ちます。
こうしておくと、新しく入る人も、自分が受け持つ範囲に集中しやすくなります。
遅れた場面で会議や報告を増やしすぎると、かえって手が止まります。必要なのは、連絡の量を増やすことではなく、迷いと行き違いを減らすことです。
たとえば、次のように整えます。
遅れた場面では、後ろの工程を軽くする改善も効きます。あとで確かめる手間を下げられれば、手戻りを減らしやすくなるからです。
たとえば、次のような取り組みが考えられます。
こうした改善は、その場では手間に見えても、あとで直す量を減らしやすく、結果として遅れの圧縮につながります。
遅れた案件でも、増員が必要になることはあります。その場合は、ただ人数を足すのではなく、どう入るかを先に決める必要があります。
終盤に人を入れるなら、新しい機能を広く任せるより、テストの追加、ログの整え、文書の整え、リリース準備のように、切り出しやすい仕事へ寄せるほうが失敗しにくくなります。
ブルックスの法則が示しているのは、人数を足せば、そのぶん納期を短くできるとは限らないということです。この考え方は『The Mythical Man-Month』の中心にある主張として知られています。
人月の神話とは、人数と月数の掛け算で期間を素直に見積もれるという見方です。しかし、ソフトウェア開発では、順番にしか進められない仕事や、つなぎ合わせにかかる手間があるため、単純な割り算は通用しません。
ソフトウェア開発の難しさは、仕事量の多さだけではありません。設計の意図をそろえること、前提を共有すること、でき上がったものをつなぐことにも、かなりの時間がかかります。
そのため、新しいメンバーが入ると、いま進んでいる作業の説明や、認識合わせの時間も必要になります。案件を率いる立場の人は、この負担を見込んだうえで人の入れ方を考える必要があります。
ブルックスの法則は、管理のしかたが結果を大きく左右することも示しています。全体像を見て、優先する順や前後のつながりを整理し、人の配置を決めることが欠かせません。
情報をどこに集めるか、誰が判断するか、レビューをどう流すかが曖昧だと、遅れた場面で詰まりが増えやすくなります。増員そのものより、進め方の整え方が問われます。
対策は一度で終わりません。見積りの振り返り、要件の詰め方、レビューの基準、テストの進め方、リリース手順など、遅れの原因になった点を次の案件に持ち越さないことが大切です。
ブルックスの法則の教訓は、増員そのものを否定することではありません。人を足す前に何が詰まっているかを見きわめ、必要なら入れ方まで設計することが重要だ、という点にあります。
ブルックスの法則は、遅れているソフトウェア開発に人を増やしても、教育の手間や、連絡と調整の増加によって、かえって完了が遠のくことがあるという教訓です。遅れた場面では、まず原因を切り分け、どこが詰まっているのかを見きわめる必要があります。
増員が必要な場合でも、任せる範囲を切り出し、立ち上がりの計画とレビュー体制を整えなければ効果は出にくくなります。ブルックスの法則は「増員は悪い」と言うためのものではなく、増員が効く条件と、効きにくい条件を見分けるための考え方です。
遅れているソフトウェア開発に人を足すと、完了がさらに遅れることがある、という経験則です。
教える手間と、連絡や調整の負担が増え、いまいる人の手が取られるためです。
結合テストやリリース準備に入った終盤で、作業の中心が調整に移る場面です。
任せる仕事を独立した単位で切り出せて、受け入れの準備も整えられる場合です。
人数と月数の掛け算だけで期間を出せる、という見方です。ソフトウェア開発では成り立ちにくいとされています。
遅れた理由を分けて見て、作業量の問題なのか、調整の詰まりなのかを見きわめることです。
会議を増やすより、決まったことを集める場所と、レビューの基準をそろえるほうが有効です。
テストの追加、ログの整え、文書の整え、リリース準備のように切り出しやすい仕事です。
直しの影響がどこまで広がるかを小さくし、分担をしやすくすることです。
遅れた場面の増員は、入れ方を設計しないと逆効果になりやすい、という点です。