これはそう。
ただ、的は射るもんだ。得た的をもらって帰るつもりか?
ジュースの自販機と同様、またまた元ツイに無いことをタイトルに入れてバカっぽくなるタイプのまとめである。
ソフトウェア開発におけるチームワークとかマネジメントの大切さとかはわかるけど、単に一人で全部作ればいいだけでは? という解決策、実はかなりスケールするし、より良いものができることが多いと思うんだよな。
— Rui Ueyama (@rui314) 2023年2月21日
特にまだ使える状態にも至っていないプロダクトを複数人で慎重に書いて入念にコートレビューしたりたりするのはあまりいい考えとは思えない。レビューなんかいらないからコードを変更しまくって取りあえずいい感じになるまで完成させるほうが優先度高い。
— Rui Ueyama (@rui314) 2023年2月21日
本題に進む。前に書いたけど、
同じことを書くのは面倒なので引用する。
小規模なプロジェクトではそうでもないのだが、プロジェクト規模が大きくなるにつれ、コミュニケーションコストがプロジェクト全体のコストに占める割合が大きくなる。当然、プロジェクトをマネジメントするプロジェクトマネージャやPMOも、多くの労力をコミュニケーションに割くことになる。下図に示すようにコミュニケーション先が増えるとコミュニケーションチャネルは増大する。下図の例では3人だとチャネル数は3だったのに対し、1人増えただけの4人ではチャネル数は6。1人増えただけで一気に倍である。
このコミュニケーションチャネル数は
n × (n-1) / 2
で計算できる。3~4人程度の小規模プロジェクトならそれほどコミュニケーションコストは大きくない。しかし延べではなく毎日数十人、数百人が稼働する規模のプロジェクトになってくると、直接相互のコミュニケーションは不可能。100人が直接相互のコミュニケーションを取るとすると、4,950チャネルになるし。そのため、各々チーム化して階層化してコミュニケーションするわけだが、それでもコミュニケーションコストは非常に大きい。約100人のプロジェクトで、PMO含めて10チームあり、各チームはメンバー数10名、チーム間は各メンバーが直接コンタクトせずチームリーダーが取りまとめてコミュニケーションする形態だと仮定して、コミュニケーションチャネルは下記の通り。
【チーム内】10×(10-1)/2 = 45
【チーム内計】(10×(10-1)/2) × 10= 450
【チーム間】10×(10-1)/2 = 45
【プロジェクト内】(チーム内計) + (チーム間) = 495
チーム化・階層化することで、直接コンタクトする4,950チャネルに対し1/10の495チャネルとなる。しかし、これでも相当コミュニケーションコストは大きい。実際にはこんなにきちんとコントロールできないので、異なるチーム間で、リーダーでは無くメンバー同士のコミュニケーションが必要であるわけだが。
というわけで人数が増えればコミュニケーションコストは爆増である。1人で作れるなら1人で全部作ればコミュニケーションコストはほぼ不要である。チーム外の人とのコミュニケーションを完全にカットできればコミュニケーションコストは0である。
ソフトウェア開発という少し範囲を広く表現しているからプログラミングだけじゃないと思う。なのでシステム開発の昔話を書く。
オレが獲得した大規模案件で最初から大人数投入という暴挙に出た。オレが獲得した案件は通常オレが基本設計全部やる。あくまでまずはたたき台としてだが。全部一通り基本設計を書いてそこで人を入れてレビューする。そのレビュー結果を修正し、そこで初めて担当者に分割する。プロジェクト管理の基本で、段階的に詳細化する手法である。
最初から大人数で基本設計をする弱点は複数ある。
担当者の能力差で設計内容に差がでる。担当者間の力関係が設計に反映されてしまう。担当者間の境界でダブりや抜けが出る。設計の粒度、詳細化度が設計者によって差が出る などである。上に書いたようにコミュニケーションコストも付加されるので、10人で設計したからといっても1人で設計した10倍の成果にはならない。2倍になればいいほう、ヘタすりゃ0.8倍くらいということはよくある。
このケースでは親会社のエラい人の意向なので一応抗議した後に受け入れたけど、時間は掛かるわ上に書いたような問題は頻出するわで多分2倍の成果も出てない。コストを無視してもオレに全部任せた方が良かった。
親会社の若手のエースがバカな子で、「バッチサーバー」なるものを作り出してしまった。当人は自分の担当範囲のバッチ処理をするサーバーのつもりだったようだが、他の担当がこぞって自分の担当範囲のバッチ処理を投げていいか聞くことに。オレも聞いた。今回の本題とは異なるが、システム内のネーミングは「名は体(たい)を表す」でいかなければこのような混同を招く。
この不毛なバッチサーバー問題ミーティングは合計6時間は使ったと思う。1人で6時間じゃなく10人以上で各6時間だよ。だからダメなんだよ最初から大人数の設計は。
コレである。
同意。複数人にするのはそれが必要になるまで遅らせた方がいいと思っている https://t.co/BfEYTBdoNP
— td2sk🤔️ (@td2sk) 2023年2月21日
今回書きたいことはだいたいこんなところです。