Skip to content

Instantly share code, notes, and snippets.

@mnrn
Last active April 4, 2021 04:29
Show Gist options
  • Select an option

  • Save mnrn/f2fa402cd095c47bcb7cad8f63315a6e to your computer and use it in GitHub Desktop.

Select an option

Save mnrn/f2fa402cd095c47bcb7cad8f63315a6e to your computer and use it in GitHub Desktop.
人月の神話

人月

人月は見積もりとスケジューリングに使われる仕事の単位であり、そのコストは実際に人数と月数の積に比例するというものですが、 仕事の大きさを測る単位としての人月は疑うべき神話であります。人月は、人と月が互いに交換できるという意味を持っているからです。

人と月が交換可能になるのは、多くの作業者の間でコミュニケーションを取らなくても、仕事が分担可能である場合のみです。
仕事が分担可能でない場合、人を増やすという対策はスケジュールにおいては何の効果も生みません。
女性がたくさん動員されたところで、子供一人が生まれてくるまでに十月十日かかることと同じです。

また、分担は可能であるがサブタスク間でのコミュニケーションが必要な仕事においては、 コミュニケーションを図る労力をこなすべき仕事量に追加しなければなりません。

コミュニケーションを図ることで増える負担は、教育・訓練および相互コミュニケーションの2つの部分からなります。
各要員は、テクノロジー、仕事のゴール、総括的戦略、作業計画それぞれについて絶えず教育されなければなりません。
これらの教育は分割することはできないため、負担の増加分は要員数に合わせて線形に変化するものと考えられます。
相互コミュニケーションが必要になる場合、仕事の各部分がそれ以外の部分と個別に調整されなければならないため、 その労力は人がn人いるとすると、n(n-1)/2に比例するものと考えられます。

たとえば、9人月分の仕事が残っているとして、残り2ヶ月であるため、4人半必要になるので、要員3人のところへ2人追加するとします。
新しく追加された2人がいかに優秀で、どれほど迅速に補充されようと、経験者1人からその仕事に関する教育・訓練を受けなければなりません。
これに1ヶ月かかるとすると、3人月はもとの見積もりにはなかった仕事に費やされることになります。
しかも、本来3つに分けられていた仕事を5つに分担し直さなければならず、すでに完了している仕事で無駄になるものも出てくる上、システムテストをより長くする必要があります。
したがって、3ヶ月日の終わりには実質的には7人月より多い仕事が残り、使用できるのは訓練された要員5人で1ヶ月あるだけとなります。
これは1人も追加しなかった場合と全く同じ遅れ具合になります。

以上より、

  • 新たに投入された開発者が生産性の向上に貢献するまでには、時間がかかる。
  • 人員の投下は、チーム内のコミュニケーションコストを増大させる。
  • タスクの分解可能性には限界がある。

ということがわかります。

このことから、ブルックスの法則で有名な 「遅れているソフトウェアプロジェクトへの要員追加は、プロジェクトをさらに遅らせるだけである。」 ということが導き出せます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment