勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

ソフトウェア開発における多能工の問題

ソフトウェア開発の現場では、特定作業に特化した専門家による分業開発から、個々人が幅広い作業をこなす多能工による開発といった方向に変わりつつある。アジャイル開発プロセスそもそも多能工を前提としている。また、全般的なソフトウェア開発プロジェクトが大規模より中小規模・短工期にシフトしていることが、専門家(単能工)による開発を難しくしつつある状況も、開発エンジニアの多能工化を後押ししている。しかし、多能工によるソフトウェア開発はベストプラクティスかというと、そうではないと思う。多能工アプローチの問題点について考察して望まないと、思わぬところから足をすくわれる事がある。

なぜ多能工なのか?専門家(単能工)はなぜだめなのか?

ファクトリー型アプローチは一時期流行し、いまなお一定の価値をもってはいるが、ほとんどのアプリケーション・ソフトウェアの開発には、現在これよりも有効な手法が存在している。
ソフトウエア企業の競争戦略

一時期に特に日本国内でスタンダードとされたソフトウェア開発の専門家(単能工)分業モデルはだいたい以下の形である。

  • ソフトウェア全体の開発工程が標準化・マニュアル化されており、原則としてこれに従う
  • ウォーターフォール開発プロセスで、順次工程が進む(要件定義→設計→プログラミング→テスト)
  • それぞれの工程に専門家(単能工)を配置して、工程毎に生産性の最適化を行う

これらはソフトウェア開発のある特定の領域ではうまくいったと思う。COBOLなどホスト系の枯れた技術での、あまり変化の無い分野でのソフトウェア開発では、上記アプローチはうまくいく。

計画駆動型手法は、「要求の大部分を事前に決定することが可能」で(プロトタイプを作成する場合も含め)、「比較的安定している」場合に最もうまくいく。
アジャイルと規律 ~ソフトウエア開発を成功させる2つの鍵のバランス~

しかし昨今のソフトウェア開発は「不安定な要求」を「複雑なアーキテクチャ」で実現することを求められることが多くなっている。設計とプログラミングを行うために作業者間で多量のコミュニケーションを取ることが求められるため、専門家(単能工)分業モデルではオーバーヘッドが大きすぎる。

マジでいっておくと、今のSIerの生産性が低いのは、要件定義、外部設計、内部設計などの各工程で、分業(別会社に発注)をやってるせいです。分業するからコミュニケーションロスが発生する。
2008-03-05

加えて、技術の進歩によりプロジェクトのコスト規模が低下していることも、専門家(単能工)分業モデルへの向かい風となっている。予算が無ければ、それぞれの分野のエキスパートをプロジェクトに参加させるのは不可能だ。

多能工の問題

とはいえ、多能工でのアプローチに問題が無いわけでもない。

アジャイルチームは,信頼性と品質の高いコードを短期間に作り出すことで知られている。その一方で,迅速なデリバリに対するプレッシャーがレビューの省略,テストの短縮,コードの安全性に対する配慮の欠如に結び付く可能性もある。
セキュアなコード開発はアジャイルの犠牲になるのか

ソフトウェア開発で必要とされるスキルセットは広範囲なので、 多能工な開発者といえども全ての知識をもって開発を行うことは現実的ではない。プロジェクトメンバーの限られた知識で行った作業が必ずしも適切だとは限らない点については強く意識する必要があると思う。

製造業における(トヨタ生産方式の)多能工が高いパフォーマンスを出すのは、以下の前提があるからだと思う。

  • あくまで特定の製品に関する複数の工程を同一の担当者が行うものである。オーダーメードとは異なる。
  • 生産作業とは別に、生産物の品質チェックが行われる(安全性はそこで担保される)
  • 必要なスキルセットは多岐に渡るかもしれないが有限(利用可能な工具は制限されている)

これに対して、ソフトウェア開発だと意思決定と作業の範囲が非常に広いため、安全性という観点ではリスクがある。例えば専門家が参加しないことにより、以下のような見落としが出ることがあるのではないだろうか。

  • 高度・広義なセキュリティについての考慮の欠落、見落とし
  • パフォーマンスの考慮
  • 法制度への準拠
  • 特定組織の標準の考慮
  • 文化・政治の考慮

技術的に回避できる問題であれば、フレームワークやツールを利用することで回避できるかもしれないと思うが、それだけでは防げないものもある。

人件費とハイエンドマーケット

多能工についてちょっと調べていたらこんな面白いブログの記事があった。

すなわち、優秀な多能工は、在野においてはごく少数であるということは、容易に想像できるだろう。教育(人材育成)によって、ある程度の水準にまで育て上げることは可能であろうが、その人材育成コストは低くない。時間も必要である。
さらに、そうした優秀な多能工には、その優秀さに見合う給与を支払う必要もある。また、その多能工が辞めてしまった場合、すぐに替わりを調達できないため、要員計画にそれなりのバッファを設けておく必要もあるだろう。
http://www.resort-jp.com/ppBlog17/?UID=1265754660

要はハイエンドなマーケットでなければ多能工モデルを導入するのは難しいという話。そういえば製造業でも、セル生産を行う対象は高級品や高級車ばかりのような話を聞いた事があるような気がする。ソフトウェア開発においても、多能工モデルを採用するとやはり人件費の問題は大きいのではないか。優秀な多能工チームによって行うソフトウェア開発と、廉価なオフショアを活用したソフトウェア開発が同一の土俵で勝負するのは、やはり厳しい。限定的なハイエンドマーケットに限ってしか多能工モデルは成り立たないのかもしれないと思っている。

追記(2012/3/23 12:30)

多数の方からTwitter上でコメントをいただいたので簡単にまとめた。そもそもITエンジニアに多能工のメタファーを当てはめるという時点で無理があるようだ。他にも興味深いコメントが多いが、時間の関係でまずはここまで。