dskst's diary

Life and Tech Blog

ブルックスの法則を可視化できるのか(あるいは、人と月は等価交換できるのか)

書籍:組織パターンにて興味深い数式が紹介されています。

その数式とは、ベテランが新人を鍛えたときのチーム全体の生産性表すものです。 本の中では”託児所”というパターンで紹介されています。

なぜ興味深いのか

人月の神話、ブルックスの法則にある通り、開発者の人数と生産性が比例しないことは自明の理ですが、わたしはそれを論理的に説明することができませんでした。

ブルックスの法則

ブルックスの法則はフレデリック・ブルックスによって提唱された、「遅れているソフトウェアプロジェクトへの要員追加は、プロジェクトをさらに遅らせるだけである」という、ソフトウェア開発のプロジェクトマネジメントに関する法則である。

数式を使ってシュミレートまでできると、開発者の人数と生産性の関係性の説明でき、さらに最適な人数がわかってくるのではないかと考えました。

問題に思うこと

さて、プロジェクトを進めていると「開発者をもっと増やせばいいのでは?」とよく言われます。
「増やしても意味ない」と口でも言っても建設的な議論にはなりません。

我々も考えなければいけません。

稼働中のプロジェクトに増員することは本当に効果がないのでしょうか。
銀の弾丸はないと言われますが本当でしょうか。

生産性を可視化する

さて、ここで数式がでてきます。
以下の通り、変数を利用して生産性というものを算出します。

X=ベテランの人数
N=新人の人数
n=新人の生産性

書籍では以下2つのケースが紹介されていました。

託児所

ベテランをひとり、新人全員の教育に割り当てるケースです。

ひとりで全員を見るということで託児所と比喩されていました。

これは、以下の数式で表現できます。

(X - 1) + N * n

ベテランがひとり減り、
新人の生産性を積算することでグループ全体の生産性がでます。

託児所の例

X=ベテランの人数=5人
N=新人の人数=7人
n=新人の生産性=0.1(ベテランの1/10とする)

(5 - 1) + 7 * 0.1 = 4.7

ベテラン5人の時の生産性が5になるので、生産性が0.3減少しました。

均等割り当て

ベテランに対して新人を均等に割り当てるケースです。

チーム全員で新人を見るケースと言ったほうがわかりやすいでしょうか。

以下の数式で表現できます。

(X * X / (N + 1)) + N * n

ひとりあたりm=N/Xの新人が付きます。ベテランの生産性は1から1/(m+1)に落ち込みます。

尚、本数式ではベテランの人数より、新人の人数が少ないケースを算出することができないのでご注意ください。

均等割り当ての例

変数の値は託児所を同じとします。

(5 * 5 / (7 + 1)) + 7 * 0.1 = 3.8

生産性が1.2減少しました。

ビジュアル化する

以下2パターンをシミレーションをしてみます。
今度は新人ではなく中堅プログラマーが増員したと考えてみます。

増員人数と生産性の関係

増員をN人行った際にどれくらい生産性に影響があるのかを図にしました。

ベテラン5名のチームに、増員を5,8,13,21名とアサインするとどうなるのか。
ここでは、増員の生産性を0.5としています。

f:id:dskst9:20190302180503p:plain

図で見て取れる通り、ベテラン5名のチームに8名が入っても生産性は10にも届きません。
人数が増えれば増えるほどチーム人数と生産性は乖離します。

増員してもリニアに生産性は向上しないことがよくわかります。

増員した人の成長を考えるとどうなるか

増員した人の生産性が向上することを視野にれるとどうなるでしょうか。

ベテラン5名のチームに、増員を8名アサインします。
生産性が成長すると考えて、0.5から1か月ごとに少しずつ上昇して4か月目で1になるとします。

f:id:dskst9:20190302182459p:plain

13名のチームが2か月経過して10名の生産性になりました。
この増員は果たして意味がある増員になるのでしょうか。

まとめ

以上から無闇なアサインがどうなるかがわかりました。

生産性という変数をどのように設定するかで状況は変わってきますが、増員というもので確実に生産性が伸びるものでもないということがわかります。

ブルックスの法則にある「プロジェクトをさらに遅らせる」というのは、増員の生産性が低いときに多く発生するのはないかと思います。

たとえば、生産性が0.1(ベテランの1/10)の人を増員したときは下記のようになります。

f:id:dskst9:20190302183453p:plain

何人アサインしても生産性が上がっていきません…。均等割り当てに至っては生産性が下がってます。
悲しみしか起きないプロジェクトになりますね。

こんな過ちが起きないように、人と月は等価交換できないということが、広く一般の知識になっていってほしいものです。

組織パターン (Object Oriented SELECTION)

組織パターン (Object Oriented SELECTION)