ホームお問い合わせプロフィール未経験→就職転職合格率年収の相場ブラック企業判別定時帰りする方法

システム開発の見積もり精度を上げる現実的な方法

2015年11月8日に投稿 → に更新 仕事術 アフィリエイトリンクを含みます

計算機

「見積もりって難しいよな、大抵は後で仕様追加されるし…」
「高く見積もり過ぎると、他社に決まっちゃうから、ぎりぎりを狙いたいんだよなぁ…」
「とはいえ仕事取るために安く見積もり過ぎると、後で悲惨なことになるしな…」

見積もりって、なんとも言えないむずかしさがありますよね?

絶対的な正解はなく、

  • ステップ数から試算
  • ファンクションポイント法
  • WBS法

などいろいろな見積もり法がありますが、どれを使っても実際の工数とは差が出てしまいます。

なぜならば、ほとんどの場合、見積もり時に与えられたシステム要件は開発を進めるに内に変わってしまうからです。

よって、見積もりに完璧さを求めても意味がありません。現実的な落としどころを狙うべきです。

今回はそんな「システム開発の見積もり精度を上げる現実的な方法」を紹介します。

まずは自分の得意な方法で見積もる

まずは「こんなもんかな」という目安を得るために自分なりの方法で見積もります。

いろいろやり方はあるかと思いますが、ここでは私が使っている見積もり方法を紹介します。WBS法です。

WBS法で見積もる手順

顧客から提示されたRFP(提案依頼書)、またはシステム企画についての口頭による説明やパワーポイントの資料を元に、システム開発に必要なすべての作業を洗い出します。

まず主な機能を抽出します。そして、その機能を構成する要素をブレイクダウンしていきます。必要な画面や機能・バッチ処理などが見えてきます。そうやって、どんどん作業単位を詳細化していってそれらを設計・実装・テストするのに掛かる工数を計算していきます。

工数は人時で計算します。1人時は1人のエンジニアが1時間で終わる作業です。
1日8時間労働と計算するので、8時間を1人日(1人のエンジニアが1日で終わる作業)とします。
また、土日祝日は休みなので、20人日で1人月(1人のエンジニアが1か月で終わる作業)とします。

作業時間の合計が1000人時(一人のエンジニアが1000時間で終わる作業)の場合、

1000人時 / 8 = 125人日
125人日 / 20 = 6.8人月 → 繰り上げして7人月

となります。

7人月なので見積金額は

7人月 × 80万円(エンジニア一人一月の単価) = 560万円

となります。

不確定要素はどれくらいあるかを考える

RFPやその他の資料がどれくらい詳細に書かれているのかをチェックします。

あいまいな表現やざっくりしか書かれていない箇所が多いようであれば、後で仕様変更・追加される可能性が高いと考えます。

このような不確定だった仕様が追加された場合に対応するために、予め追加仕様の対応工数を追加します。

例えば不確定要素に対応する時間が400人時必要と計算した場合、

400人時 / 8 / 20 = 2.5人月 → 繰り上げして3人月

となり、

7人月 + 3人月(不確定分) = 10人月
10人月 × 80万円(エンジニア一人一月の単価) = 800万円

となります。

これで、不確定要素にも対応できるであろう見積額となりました。

完璧に未来を予測することはできないので、あくまで「対応できるであろう」としているのがポイントです。

競合他社がどれくらいで見積もるか予想して微調整する

競合他社名が分かっていれば、その会社の1エンジニアの月単価はいくらくらいかを予想します。

給与水準の違いから大体の月単価を予想するんです。

競合A社は1エンジニアの月単価は90万円で自社より高いだろうと考えられるのであれば、おそらく自分が計算した見積額の方が低くなる可能性が高いので、このままの金額(800万円)で提案していいでしょう。

逆に競合B社は1エンジニアの月単価は70万円で自社より安いだろうと考えられる場合は、安い金額で提案される可能性が高いので、不確定要素分の金額を半分に減らします。

3人月 / 2 = 1.5人月
1.5人月 × 80万円(エンジニア一人一月の単価) = 120万円
800万円(元の総額) – 120万円(競合に競り勝つための値引き分) = 680万円

これが、実際の見積額となります。

不確定要素なので、もしかしたら思ったほど仕様追加はないかもしれないと考えることもできるので、競合他社の見積もり額が安そうな場合は、この部分を半額にして金額を調整します。

これで高過ぎず、安すぎない金額が狙えるはずです!