β. (Bee’s Blog) このページをアンテナに追加 RSSフィード

2005-09-04

[] ソフトウェア開発における人月について

 アークランプの鈴木雄介さんが、最近のソフトウェア業界における人月の意味合いについてエントリを書いていた。以下の話は、オープンソースソフトウェア開発(オープンソースの導入、カスタマイズオープンソースそのものの開発)における話が、大部分を占めており、従来から存在するプロプライエタリソフトウェア開発には余り当て嵌らないと考えており、そのあたりは注意が必要と考えている。

no title

 プログラムビジネス上の単位である人月は、開発者・発注者のいずれからみても、正しく基準となり得ていないという問題を孕んでいることは、よく知られた事実である。しかし、現在のところ、他に最適なモノサシがないため、やむを得ず、これを使っているのが現状ではないだろうか。鈴木さんは、その人月が、ある開発手法においては、有効になってくるのではないかと言っている。その開発手法とは、アジャイルハッカーモデルで、アプリケーションの価値を正しく表現することが出来るのではないかと言っている。

 実開発工数100人月(1億円)という案件があれば、10人の優秀なエンジニアに1000万円ずつ払って半年で実現できるはずだ。しかも、圧倒的に良い品質で。もちろん十分に優秀であると見極める力が必要だが、そんなもんだと思う。10倍の生産性、10倍の品質なんて当たり前なのだ。真のハッカーというは、そういう人種である。

 こうした、アジャイルハッカーモデルを言い換えれば、クライアント自身がリスクを取っているといえる。そして、人月はまさに人月であり、人件費というコストになっている。銀の弾丸を扱える(つまり、リスクに応じて正しい対処を行える)人間をそろえれば、人月の神話は実現できるのだ。

 確かに、優秀な人材であれば、ほぼ見積り通りの工数かそれ以下の工数で、要求以上の品質を確保でき、結果として人月の精度がかなり向上すると思うので、この開発手法は、人月の神話を実現しうると思う。ただし、優秀な人材をどうやって選考するのか、そもそもそのような優秀な人材が集まるのかといった問題などは残されているとは思うが、見積り誤りのリスクを低減しうる一つの手法ではあると思う。

 また、コモディティ化によって、人月の単位の有効性が高まったと言っている。

 アプリケーション開発が人に依存する、つまり人月という単位の有効性は、コモディティ化によって、さらに高まったではないだろうか。

 かつて、コンポーネントとツールによって開発効率を上げようとしたことがあった。しかし、そここそがコモディティ化の波を受けてしまった。いまではオープンコンポーネントを使いこなす力が重視されている。

 前のエントリ プログラマの消える日 - β. (Bee’s Blog)でも類似したことを書いたが、オープンコンポーネントを使いこなすためには、ハッカー級の技術が必要であり、結果として、一定のレベル以上の人材が集まってくるため、そう言った意味では、人月の単位での見積りの精度が向上するとは言えるのかもしれない。

 たしかにITはコモディティ化された。しかし、対象は人ではない。

 その通りだと思う。IT化は、仕事のやり方を定型化し、情報の流れがフラット化し、誰でも情報を入手可能にさせたという意味で、コモディティ化したが、別の言い方をすれば、難易度が中〜下のレベルの作業の単価が下がり、上レベルの仕事の単価が上がりつつあると思う。この上レベルの仕事に対する人月の見積りは、かなり精度を高めることは出来、トータルで見ると、工数見積り誤りは、低減されると考えている。

yusuke_jazzyusuke_jazz 2005/09/04 13:06 arclampのyusukeです。トラバありがとうございます。
優秀な人材による成果を、どう規模に生かすのかという点が課題と感じています。「プログラマの消える日」で書かれている通り、一般的なETLでは効果は薄いですね。ですから、アジャイル/ハッカー・モデルで”現場にあったETL”を作ってしまえば、書いてある効果が生まれるのではないかと。これからもよろしくです。

besusbesus 2005/09/06 00:35 yusukeさん、コメントをありがとうございます。ETLというか、プロジェクトで使用する用語、マクロ、テンプレートなどをきちんと定義するような、生産性を著しく向上させるための素材を準備することが、ポイントだと思いました。こちらこそよろしくお願いします。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/besus/20050904/p1