見積もりについて

見積もりは単に開発費と納期を提示するだけでなく、「いつまでに何をするのか?」、「どのタイミングで何を合意しておくのか?」など作業範囲をはっきりさせておくことが大切である。
見積もりはなるべく10日以内に行うのがのぞましい。

見積もりは提案依頼書(RFP)の確認から始まり、クライアントに見積もり提案するところで終わり。 クライアントが見積もりに合意した段階でプロジェクトスタートなる。

RFPの文面の各所に返答する形で提案するという簡略方法もある。

RFPの確認から見積もり提案までの手順

  1. 提案依頼書(RFP)の確認
  2. RFPを分析
  3. ヒアリング資料の作成
  4. ヒアリング
  5. 見積もり


見積もりのドキュメントについて

提案依頼書(RFP)

RFP(Request For Proposal)から見積もり作業は始まる。
RFPとは提案依頼書のこと。

RFPの項目の例



次のタスク:RFPを分析

補足
MPUFというプロジェクトマネージメントのコミュニティが存在する。

参考
提案依頼書(RFP)とは?作成方法とテンプレートサイト5選を紹介


RFPを分析

下記一覧を元にRFPを分析し、仕事を請け負うか判断する。



次のタスク:ヒアリング資料の作成


ヒアリング資料の作成

クライアントにヒアリングを行う前にヒアリング資料を作成する。
RFPの分析を元に、開発の目的、現在のシステムの状況、運用手順などを解析し、クライアントへの質問事項をまとめる。

ヒアリング資料の種類


ヒアリングシート

ヒアリングシートの内容の例。
  1. クライアントが抱える現状の問題点は?
  2. プロジェクトの目的は?
  3. プロジェクトの現状の問題点、目的、本質、現状の問題点は?
  4. 文書資料はあるか?運用フロー図はあるか?
  5. 現状の業務フローは?
  6. システムによる業務フローは?
  7. どんなシステムと似ているか?システムのステレオタイプは?
  8. どんな機能が必要になりそうか?
  9. 主要画面は?
  10. マスタ系の画面数は?
  11. 集計系の画面数は?
  12. データ量は?(100万件級、1000万件級は注意)
  13. リリース後のメンテナンス担当は?
  14. 自動バックアップシステムは必要か?
  15. 負荷がかかる箇所は?
  16. アクセス集中が起きそうなところはあるか?
  17. セキュリティのリスクは?(過去にセキュリティ的な問題が生じたことがあるか)
  18. 提案業務の一般的仕様は?(Facebook,レコメンド機能など)
  19. 検討すべきリスク、現状の大きな問題点は?(実現調査が必要な箇所)
  20. 現状の不明点、疑問点、あいまいな箇所は?
  21. 開発チーム体制/対応窓口は?
  22. システムを利用するユーザーの種類は?
  23. 想定しているユーザーの人数は?(ユーザーの種類毎)
  24. 予算感は?(1人月あたりの予算)
  25. 何人月くらいの仕事量か?
  26. スケジュール感と納期感は?
  27. DBは?
  28. プログラミング言語は?
  29. フレームワークは?
  30. 稼働サーバーは?
  31. Githubを利用するか?
  32. 開発手法は指定されているか?(ウォーターフォール、アジャイルなど)
  33. カットオーバー後の体制について(フェーズ終了後の体制)
  34. クライアントはこちらからの提案を希望しているか?
  35. クライアントはシステムについて詳しそうか?
  36. 期間に対してやりたいことが多すぎまいか?(分割提案は必要?)
  37. プロジェクトの本質は?(クライアントの依頼とシステムはマッチしているか?)
  38. いつまでにだれが何をするか?
  39. マイルストーン(節目、フェーズ)は?

提案書

クライアントが提案を求めているようであれば、実現方法を考え提案できる。
システムに詳しい立場からのビジネスを中心に提案する。ビジネスを中心にした場合、電子化しないほうが良い場合もある。
ただ、あれこれと提案候補を考えると時間がなくなるので注意。

実績あるアーキテクチャに基づいたメンテナンスしやすいシステムを提案する

運用フロー図

運用を図で表したもの。 運用フロー図をもとにヒアリングを行うと以下の利点がある。
  1. クライアントに説明するとき便利。
  2. クライアントが思い描いているフローを聞き出せる。
  3. 運用にかかわる人を聞き出せる。
  4. データの流れ、状態、アクションが分かりやすくなる。
  5. システム化するものとしないものを見分けられる。
運用フロー図にUMLのコミュニケーション図を用いるのもいい。

アジェンダ

アジェンダとは会議で論ずる事項が書かれた予定表のような書類。
直接クライアントに会ってヒアリングを行う場合、アジェンダに沿ってヒアリングすすめる。
アジェンダにはおおまかな質問事項と時間配分を記載する。
ヒアリング前にアジェンダをクライアントに送るようにする。


次のタスク:ヒアリング


ヒアリング

ヒアリングの目的

  1. ヒアリングの目的は開発目的を明確にすることである。最終的に具体的なイメージができるようにする。
  2. 問題の本質を知る。
    • クライアントはどのような経緯でこのプロジェクトを立ち上げることにしたのか?
    • このプロジェクトによりどのような効果を期待しているか?
  3. クライアントとの信頼関係を構築する。

ヒアリングの覚書

  1. 直接クライアントあと会う場合、名刺と書類のコピーをいくつか持参すること。
  2. 名刺を渡し、自分の立場を知らせる。
  3. ヒアリングに参加するクライアントの立場や権限をできるだけ知るようにする。
  4. アジェンダに沿ってヒアリングを進める。
  5. ヒアリングシートの質問事項をもとにヒアリングを行う。
  6. RFPの再確認もついでに行う。
  7. ホワイトボードやプロジェクターを通して、マインドマップを書きながらヒアリングを進める方法がある。
  8. ヒアリングでは現状の課題、問題点、要望を聞き出すことに重きを置き、詳細な業務フローは後日対応するようにする。時間がかぎられているためである。
  9. 直接業務を担当している人や、開発の目的を理解しているクライアントに話を伺うこともある。
  10. 問題点があれば、解決に今までのノウハウが役に立つことを伝えることができる。
  11. クライアントが他にやりたそうな事があるなら聞いてみる。
  12. クライアントにとって利がありそうなサービスを提案することができる。(見積もりに影響を与えるので注意)
  13. クライアントの新たな要望が技術的や工数的にできるかわからないこともある。「できる」とすぐ答えるのでなく、実現可能な提案をするようにする。

次のタスク:要件定義


見積もり

見積もり手順の作成

  1. 運用フロー図をヒアリング結果を元に更新する
  2. 機能一覧を作成する
  3. PERT法で工数算出
  4. 作業一覧
  5. 開発計画
  6. スケジュールを作成
  7. 見積書を作成
  8. 見積書をクライアントに提示する


機能一覧を作成

  • 使いやすいユーザーインターフェースにする。
  • 要件を分析しながら開発する画面、機能を洗い出し、機能一覧を抽出。
  • 複雑な機能の実現方法を検討する。
  • 簡易的なDB設計も行う。(ER図)
  • 各機能ごとにリスクを記入する。
  • 経験を頼りに工数を入力する。 3種類の工数である最速工数、標準工数、最遅工数を入力するとPERT法で工数を算出できる。
    最遅工数はリスクが高い機能ほど多めに設定すること。(できればリスクが小さくなるよう事前に検証したほうがよい)
    工数の単位は「人月」、日数、時間などがある。
  • ブレーンストリーミングで要望実現に関するアイデアを出すこともできる。
  • 優先して開発する機能と後で開発する機能を分類する。
  • あいまいになっている箇所の機能提案

機能一覧の例
作業名リスク最速工数標準工数最遅工数説明
テストA画面0.51.52.5マスター系画面
テストB画面0.51.02.0通常のCRUD画面
テストC機能1.03.010.0調査が必要な機能

PERT法で工数算出

工数やスケジュールの算出は難しいものである。実際、やってみないとわからないからである。
工数を見積もる方法は非常に多数存在する。その中の一つにPERT法というものがある。

PERT法
機能一覧で入力した最速工数、標準工数、最遅工数を元に工数を算出する。 算出にはPERT法を用いる。
見積もり工数 = (最速工数 + 4 × 標準工数 + 最遅工数) ÷ 6
工数をPERT法で算出
作業名リスクPERT法・工数最速工数標準工数最遅工数説明
テストA画面1.750.51.52.5マスター系画面
テストB画面0.60.20.51.5通常のCRUD画面
テストC機能4.31.03.010.0調査が必要な機能

作業一覧

機能一覧から作業一覧を作成。
作業一覧には作業範囲と見積もり額を入れる。
作業範囲を明確にするという大きな役割があるのでクライアントにしっかり確認してもらうようにする。

作業範囲を決める
  • やりたいことはどんどん膨らんでいくため、絞り込みの作業も必要になる。
  • 優先すべきことと後回しでよいもの分ける。
  • 予算内でできる機能だけを提案する。
  • 力のかけどころを見極める。
  • コストや納期と相談しながら作業をフェーズ分けする。

作業一覧に含めることができる作業(タスク)の例
  • 画面開発
  • 機能開発
  • 業務改善の検討作業
  • 問題の調査作業
  • バッチ処理の開発
  • 運用しやすい体制構築
  • 「〇〇の見直し」というタスク

開発計画

ヒアリングシートを元に開発計画書を作成する。
開発計画書は規模が大きいので見積もりの段階では小さめに作る。

開発計画に盛り込む内容
  1. 開発アーキテクチャ(パッケージ開発、フルスクラッチ開発など)
  2. ウォータフォール or アジャイル
  3. チーム体制(組織図)
  4. セキュリティ
  5. 強いシステム
  6. 共有体制(情報共有ツール)
  7. メンバー構成
  8. 設計思想
  9. 用語集

スケジュールの作成

PERT法で工数を算出しているので後はこの工数にそってスケジュールを作成するだけ。
予備日も入れる。

見積書の作成

IT以外の業種が使用している一般的な見積書でよい。
項目は作業一覧を参考に作成する。


見積もりのドキュメントについて

見積もりに関するドキュメントの例
  1. RFP(提案依頼書)
  2. 運用フロー図
  3. ER図
  4. ヒアリングシート
  5. 開発計画書
    • 作業一覧
    • 機能一覧
    • スケジュール
    • その他・・・
  6. 見積もり書

ドキュメントの注意点
  1. ドキュメントの多すぎに注意。
  2. 文書はテンプレートを用意しておくと、すばやく作成できる。
  3. 設計図は顧客が見てもある程度理解できるようにする。
  4. UMLも使えるがクライアントにも理解ができるようにすべき。

見積もりの心得

  1. タスクを適切な大きさに切り分ける
  2. タスクの内容を項目分けし説明を記述する(項目例→実装方法、予測工数、リスク、DBデータ取得、DBデータ保存、JSON送受信、遷移元、遷移先、その他...)

タスクの内容を項目分けして解析

	実装方法
	工数について
	リスク
	DBデータ取得
	DBデータ保存
	JSON送受信
	遷移元
	遷移先
	概要
	保守