開発者ブログ

システム開発見積もりのジレンマ:なぜ正確な予測は難しいのか?

こんにちは、matsuです。

前回からかなり間が空いてしまいましたがシステム開発の見積もりのお話の続きをさせてもらいます。

システム開発見積もりの重要性とその難しさについて

ここでは見積もりの重要性についていくつか必要となる項目をあげさせてもらいます。

予算管理
正確な見積もりがあれば、プロジェクトの予算を適切に設定し、コストオーバーランを防ぐことができます。予算が適切に管理されていないと、プロジェクトが途中で資金不足に陥る可能性があります。

スケジュール管理
見積もりに基づいてスケジュールを立てることで、納期を守ることができます。スケジュールが遅れると、クライアントの信頼を失うだけでなく、追加のコストが発生することもあります。

リソース配分
見積もりは、必要な人員や資源を適切に配分するための基礎となります。リソースが不足すると、プロジェクトの進行が遅れたり、品質が低下する可能性があります。

リスク管理
見積もりを通じて潜在的なリスクを早期に特定し、対策を講じることができます。リスクが適切に管理されていないと、予期せぬ問題が発生し、プロジェクトの成功が危ぶまれることがあります。

クライアントとの信頼関係
正確な見積もりは、クライアントとの信頼関係を築くためにも重要です。見積もりが精度が低いと、クライアントの期待を裏切ることになり、信頼を失う可能性があります。

当たり前のことのように見えますが、次からはこれらがなぜ難しいのかを見ていきます。

見積もりの不確実性の原因

要件の不明確さ
曖昧な要件:クライアントが具体的な要件を明確に伝えられない場合、開発チームは推測に頼ることになります。これにより、見積もりが不正確になるリスクが高まります。
変更される要件:プロジェクトの進行中に要件が変更されることがよくあります。これにより、初期の見積もりが無効になることがあります。

技術的な複雑さ
新技術の導入:新しい技術や未経験の技術を使用する場合、その技術に関する知識や経験が不足しているため、見積もりが難しくなります。
システムの複雑さ:システムが複雑であればあるほど、見積もりの精度が低下します。複雑なシステムは予期しない問題が発生しやすく、それが見積もりに影響を与えます。

人的要因
チームのスキルと経験:チームメンバーのスキルや経験がばらついている場合、見積もりの精度に影響を与えます。経験豊富なメンバーが多い場合は精度が高くなりますが、逆の場合は不確実性が増します。
コミュニケーションの問題:チーム内やクライアントとのコミュニケーションが不足していると、誤解や情報の欠落が発生しやすくなり、見積もりに影響を与えます。

リスクと不確実性
リスクの識別と管理:すべてのリスクを事前に識別し、管理することは難しいです。予期しないリスクが発生した場合、それが見積もりに大きな影響を与えることがあります。
不確実性の高い要素:プロジェクトの初期段階では、多くの不確実性が存在します。これらの不確実性が解消されるまで、見積もりの精度は低くなります。

どれも確かにあるあるといった内容でしょうか。
次は見積もりといってもいくつか手法があります。
それぞれの手法について簡単に説明させてもらいます。

見積もり手法の紹介

類推法
過去の類似プロジェクトのデータを基に見積もりを行う方法です。経験豊富な企業では、迅速かつ比較的正確な見積もりが可能です。ただし、過去に類似のプロジェクトがない場合には適用が難しいです。

ボトムアップ法
システムの各機能を細かく分解し、それぞれの工数を積み上げて見積もりを行う方法です。精度が高い反面、詳細な分析が必要で時間がかかることがあります。

プログラムステップ法
開発するシステムのコーディング量をステップ単位で見積もる方法です。具体的なステップ数を基にするため、精度が高いですが、新規開発には適していない場合があります。

ファンクションポイント法
システムの外部入力、外部出力、外部参照、外部インターフェイス、内部論理ファイルの5つの要素を基に見積もりを行う方法です。定量的な評価が可能ですが、見積もり作成者の主観が入りやすいです。

標準タスク法
WBS(作業分解構造)に基づいて、各作業単位ごとに工数を見積もる方法です。精度が高いですが、詳細な作業分解が必要です。

パラメトリック法
要件や設計箇所を点数化して見積もりを行う方法です。計算式に基づくため、担当者の知識や経験に依存しにくいですが、要件の数に依存するため精度が低い場合があります。

これらはどれが正しいとは一番いいとかではなく、その時々にあった見積もり手法を利用するのが良いと思います。
私は上記を組み合わせて見積もる場合もあります。

見積もりの精度を向上させる方法

要件定義の徹底
詳細な要件定義:クライアントと綿密にコミュニケーションを取り、要件を明確にします。曖昧な要件は見積もりの不確実性を高めるため、具体的な要件を文書化することが重要です。

タスクの細分化
タスクの分解:プロジェクトを小さなタスクに分解し、それぞれのタスクに対して見積もりを行います。これにより、見積もりの精度が向上し、進捗管理もしやすくなります。

過去のデータの活用
類似プロジェクトのデータ:過去の類似プロジェクトのデータを参考にすることで、より現実的な見積もりが可能になります。データベースを活用して、過去の実績を分析しましょう。

リスク管理
リスクの洗い出し:プロジェクトのリスクを事前に洗い出し、それに対する対策を講じます。リスクが発生した場合の影響を見積もりに反映させることで、精度を高めることができます。

複数人でのレビュー
見積もりのレビュー:見積もりを複数人でレビューすることで、見落としやバイアスを減らすことができます。異なる視点からのフィードバックを取り入れることで、より正確な見積もりが可能になります。

継続的な見直し
進捗のモニタリング:プロジェクトの進行状況を定期的にモニタリングし、見積もりと実績の差異を分析します。これにより、見積もりの精度を継続的に向上させることができます。

標準化とツールの活用
見積もり手法の標準化:社内で見積もり手法を標準化し、統一された方法で見積もりを行います。また、見積もりツールやソフトウェアを活用することで、効率的かつ正確な見積もりが可能になります。

制度を上げる手段はいろいろあります。
きっちりやるとなるとそれなりの工数を使います。
結構どころかかなり大変な作業になります。

おわりに

見積もりはいろいろ書きましたが実際はかなり大変です。
いざ見積もろうとしてもなかなか正確な見積もりができません。
私が見積もりする際には類推法をベースに他の手法も交えて算出することが多いです。
そして最後には自分がやるとしたらどうだ?と考えて最終的な見積もりを出します。

ではこれで必ずうまくいくのであれば世の中に炎上プロジェクトというものは存在しないはず。
うまくいかないということは不確実性の原因であげたいずれか、もしくは複数が要因となっている可能性があります。
その原因をいち早く気づき軌道修正するのも管理する側の役割となります。

次回もマネージメント業務やられている方々とこれから底を目指したいという方々に向けてなにか発信出来ればと思います。
ありがとうございました。


Recruit

ディーメイクでは各ポジションで一緒に働く仲間を募集中! エンジニア、デザイナー、ディレクターなど、多彩な職種があります。
一緒に成長していきましょう!

最新記事

おすすめ記事リンク

-開発者ブログ