見出し画像

頭数だけ揃えても開発キャパは思うようにスケールしない

頭数だけ揃えたって、開発キャパシティは思うようにスケールしないよ。どうしてって?だって、ソフトウェア開発は、チームプレーだから。

ミッドフィルダーばかり11人いても、サッカーの試合で勝つのは難しいよね。それぞれのポジションが揃って、巧みに連携してこそ勝利を導くわけでしょう?

ソフトウェア開発もチームプレーなんだよ。それぞれが受け持つポジションがあって、互いに連携するわけ。

スポーツチームとの違いは、控え選手がいないことかな。それってリスクだよね。そうそう、急な欠員に対して、すぐに補填できない。サッカーで言えば、11人揃わずにゲームに臨むようなものだよ。

こういう事態に備えて、2つのことが重要になるんだ。チーム内でポジションを冗長化することと、稼働率を抑えることね。

冗長化って言うと、ちょっとやらされ感があるかな。それぞれが自分のポジションだけに固執していると、チームは助け合えないでしょう?自ら進んでフォローするマインドとスキルを育てないとね。

それには、メンバーがタスクで手一杯な状態にしちゃだめだ。欠員が出た時に、フォローにまわれなくなるし、まわろうとしなくなる。稼働率が高すぎると、ただの個の集まりに陥って、チームという視点を失うんだ。

チームビルディングって大切だよ、ほんと。スポーツチームも、必ずチームで集まって練習するでしょう?チームとしての練度と一体感を高めることが、それだけ重要ってこと。

だから、チームを不可分な単位として考えるんだ。個の集まりじゃなく、チームがひとつの個なわけ。

チームが個なんだから、メンバーが増え過ぎると逆に効率が悪化する。7±2人程度が好ましいって、聞いたことない?ソフトウェア開発は、スモールチームでフォーメーションを組んで戦うゲームなんだ。

じゃあどうやってキャパシティをスケールさせるのかって?もちろん、新しいチームを育てる。チームという単位でスケールさせていくんだよ。

でもね、複数チーム制を機能させるってのは、思うほど簡単じゃない。ソフトウェアシステムを複数チームでどう分割、担当して開発するか。その境界付けに悩むことになる。

だだっ広いサッカーグラウンドを区切らず使うことをイメージしてみなよ。そんな場所で同時に複数のゲームが行われたら、大混乱になるのは目に見えてるよね。いくつかのフィールドに区切って、それぞれ独立してゲームすべきなのは明らかでしょう?

ソフトウェアシステムに境界を設定するのも同じ理由さ。コンポーネントと呼ばれるフィールドに区切らないと、まともにプレーできない。

ただね、フィールドと違って、コンポーネントってのは互いに繋がってる。これをどう繋げるのか、慎重に設計しなきゃいけない。下手すると、チーム間にタスクの従属関係が形成されやすくなってしまうから。

タスクの従属関係が、並行開発の阻害要因だって知っているでしょう?プロジェクトマネジメント経験者なら、常識だよね。スケジュールをのばす原因になりかねない。

タスクの従属関係は、チームを互いに束縛する鎖のようなものなんだ。がんじがらめの状態じゃ、それぞれのチームは独立した個として活動できない。

だから、優秀なアーキテクトの存在が欠かせない。ソフトウェアシステムの設計の良し悪しが、チームプレーに影響するわけだから。

ソフトウェアシステムとソフトウェア開発組織っていうのはさ、対になって漸進的な進化とトランスフォーメーションを繰り返すんだ。これこそが、スケーラブルなソフトウェア開発ってことさ。

この記事が気に入ったらサポートをしてみませんか?