要件が決まっていないプロジェクトの開発期間を瞬発力で見積もる

 

KINTO Technologies Advent Calendar 2021 - Qiita の10日目の記事です。

 

全てのプロジェクトは様々な部品とプロセスで構成されているため、要件が決まっていない初期に全てを明らかにしてプロジェクト完了までのコストや期間を見積もるのは非常に困難です。

ですが、プロジェクト計画前にユーザから見積もりを依頼されたり、予算を取るために概算コストを算出してなんてことを依頼されたりします。

なので、そんな中でも少しでも確度を上げるため、私はこうやって短期間で見積もっています。

 

実際のプロジェクトの見積もりはアーキテクチャデザイン、リソース計画、コスト計画等が必要なので、持っている情報だけで簡易に見積り、そこそこ合っている感じ且つ、理由付けができる値を狙っています。

 

 

流れ

  1. 要望や要件から概要ストーリーを作る
  2. ストーリーに重み付けをする
  3. 標準的なストーリーの工数を算出する
  4. ストーリーに前後関係を付け、ストーリー間の関連パスを繋げる
  5. 全体の工数とリスク幅と開発期間を算出する
  6. 知見者と読み合わせる

 

1.要望や要件から概要ストーリーを作る

担当の人力で実現したい要望、要件からストーリーを作っていきます。
詳細にストーリーを設定すると実際にプロジェクト計画を行う際に仕様の乖離が大きくなるため注意します。
例)
要望:営業部用に経費管理を導入したい
概要ストーリー:営業担当者が、経費を登録する


2.ストーリーに重み付けをする

作ってみたストーリーに重み付けをしますが、基本的には独りプランニングポーカーで機械的に設定していきます。
[誰が]の人数、[何をする]の文章量により重み付けを相対的に決定します。
経験上、この時点で深く考えても信頼性は変わらないので直感でパパっと決めていくことをお勧めします。

例)
重み 5:    営業担当者が経費を登録する
重み 13:    営業担当者が経費を登録して、経理担当者が経費を承認した後に、営業担当者が経理担当者へエビデンスへ送る


3.標準的なストーリーの工数を算出する

作成した全ストーリーから重みの平均値を出します。

平均に近いストーリーを基準として、テックリードもしくはエンジニアと概算工数を出して合算します。

 

4.ストーリーに前後関係を付け、ストーリー間の関連パスを繋げる

イメージとしてはクリティカルパスを設定する感じですが、ストーリー間の前後関係を付けてストーリーの最後までのパスを繋げます。
並行で作業するものが出てきたら、フロートを定義してクリティカルパスと最短の開発期間を認識します。

 

5.全体の工数とリスク幅から開発期間を見る

リスク幅を設定して狙っていくゾーンを決めます。

IPAが発行している下記などを参照して、リスク幅や開発期間の妥当性を見てみます。

「ソフトウェア開発分析データ集2020」の発行:IPA 独立行政法人 情報処理推進機構

 

狙っていく見積もりのゾーンイメージは以下のようになります。

 

f:id:takafumint:20211209095430p:plain

見積もりゾーンのイメージ

 


6.知見者と読み合わせする

最後に客観を入れて判定するために、知見者とリスクが妥当か確認して、見積りを終了します。

自分以外の知見者と読み合わせしてリスク幅の中からどこを取るか決めますが、今までの概算見積りとプロジェクト終了時の結果比較をすると概ね1.20~1.45程度のコストと開発期間になっているため、概算見積りに対して1.45分のリスクを入れて提案することが多いです。

 

最後に

ぜんぜん、瞬発力じゃない感じに仕上がりましたね。

プロジェクト開始時の見積り精度を上げることは、遅延リスクやコストの超過リスクを回避してプロジェクト関係者の利益に繋がるということを信じて、これからも精度を上げるためにアップデートしていきます。

 

 

当社では、トヨタ車のサブスク「KINTO」等の企画/開発を行っており、エンジニアを募集中です。
KINTO Technologies コーポレートサイト