チーム編成に見る品質確保手法

人月の神話(人月の神話 - Wikipedia)では、小規模開発でも大規模開発でも、外科手術チームのような少数精鋭のチーム編成を行うことを推奨している。

外科手術チーム

外科手術チームとは、役割分担がはっきりとしたその道のスペシャリストの集まりである。
ちなみにこれは、チーム全員が精鋭なのではなくって、精鋭のチーフプログラマをささえる2流、もしくは1流の集団というのが正しい。もちろん、全員が精鋭ならいう事ないが。
設計実装の実務を行うのは、チームプログラマと、それを支える副執刀医である。それ以外の人はこの二人のサポート役という位置づけである。
編集者というのは、ドキュメントを作る人のことである。
f:id:student2010:20180908205950p:plain


また、チームに必ず必要な人材として、下記の2人が示されている。外科手術チームに当てはめれば、執刀医チーフプログラマが技術主任(アーキテクト)であり、管理者が制作主任(マネージャ)である。昔よくいたプレイングマネージャとは下記の両方を一人二役でこなす人のことである。

【チームに必要な人材】

  • 制作主任(マネージャ) ⇒管理者
  • 技術主任(アーキテクト)⇒チーフプログラマ


非凡なプログラマーと、平凡なプログラマーの生産性の差は10倍にもなるという事なので、平凡なプログラマを集めてSW開発するよりも、この体制で臨む方がよいだろう。
また、10人のプログラマで開発を開始してしまうと、その間のコミュニケーションにかかる時間的コストが大半を占めてしまうが、執刀医と副執刀医だけでメイン作業を進めるならその時間も減らせる。これは大きい。

しかし、大規模開発の場合、たった10人のチームでは、どうあがこうと時間だけが過ぎて行って、いつまでたっても完成しないという事態になる。人員はそれなりに必要になってくる。


大規模開発でのチーム編成

大規模開発でも外科手術チームの生産性を使ってシステム開発を行うにはどうするべきか。
単純である。このチーム編成を複数作り、それを統括するチーフプログラマの集団という別チームを用意するのである。
そして、最初の概念設計段階では、このチーフプログラマの集団だけのチームでPJ運営を行う。
そして、概念設計が終わって、実装へ入る段階で、人員増強して、大人数プロジェクトとして運営するのである。

大規模開発で必要なコンセプトの一貫性というものを、上記のチーフプログラマが担保する為のチーム編成である。




コンセプトの完全性の担保

コンセプトの完全性こそ、システムデザインにおいて最も重要な考慮点だ。


上記の言葉は、まさにその通りだと思った。40年以上前から、これが真理なんだと思うと、心強い。設計コンセプトは二の次で、実装品質のみを高めようとする動きがあるので、それは違うだろうと思ってたところだった。


機能 対 コンセプトの複雑さの比率がシステムデザインの究極の試金石である。


貴族政治によるコンセプトの完全性の死守

f:id:student2010:20180908213412p:plain

SW開発は、アーキテクトが貴族政治を行って、プログラマに指示を出す形で、アーキテクチャ(コンセプト)の一貫性を死守することが品質を確保する上で重要だとブルックスは主張している。確かにさまざまなコンセプトが入り乱れたSW開発を行うと、それはスパゲッティコードの出来上がりである。

アーキテクトは、システムの概念設計を上流で行い、下流プログラマ達へそれを伝え、そのコンセプトが崩れる事が無いように頑張らないといけない。

しかし、実際には、コーディングフェーズとなると、実装者から、様々な意見、提案が為される。しかしその中には、コンセプトを変えてしまうものも存在する。その場合には、毅然として、その変更要求を跳ね除けなければならない。敬意を持って。
つまりトップダウンで行った概念設計の死守である。

これによってコンセプトが保たれ、複雑性に起因する不具合や進捗遅れなど、様々な問題が低減される。
ここで重要なのは、あくまで低減であって、解決ではないということである。

大規模開発時のチームビルディング

実際に開発する時には、外乱ノイズを、除去するためにも、最初は一人か二人の非常に、少数で概念設計をするべきである。
ある程度コンセプトが固まり、システムの概要が見えて来た段階で、チーフプログラマとなるべき人員を何人か集めて、アーキテクト集団ともいうべきチーム編成を行うことで、コンセプトを完成させる。
そして、コンセプト設計が終盤に差し掛かったころに、各チーフプログラマをリーダーとする外科手術チームを編成する。
これは、新規メンバー達の勉強期間と、チーム編成最初の動乱期を乗り越えて、スムーズに設計へ入るためのファストトラッキングである。