経験のない技術だったり、知らないことに対して見積もりをしないといけないとき、どうしますか?
見積もりは難しい
エンジニアをやっていると見積もりをする機会が多々あります。そして、見積もりが得意なエンジニアはなかなかいないのではないでしょうか?そもそも、見積もりは不確実性があるなかで未来のことについて推測をする作業であるので難しいのは当然と言えば当然と言えます。また、厄介なのが見積もりをもとにスケジュールを組まないといけないことです。不確実な推測をもとにステークホルダーに宣言をしないといけないので心理的にもあまり気が進みません。
未経験のタスク
このように難しい見積もりですが、見積もるべきタスクが未経験のタスクの場合どうなるでしょうか?例えば、Reactをなにも知らないのに「この画面作って欲しいのですが、どのくらいでできそうですか?」などと聞かれるような場合です。これは極端な例ですが、自分が詳しい専門分野であっても初めて行う領域のタスクをやる機会があり、それを見積らなければいけない場面が出てきます。なんとか回答したとしても、それは適当に回答したのとどの程度違うでしょうか?答えは何も違わないと思います。
このようにいつかはどこかの場面で対峙せざるを得ない未経験のタスクですが、未経験という形容詞から明らかなように不確実性の塊です。では、どのように対処すればよいでしょうか?
ちまたにある方法論
いくつかの見積もり方法をざっと見ていきましょう。
類推法
過去の類似プロジェクトの実績を基礎に見積る方法です。しかし、今回は未経験なタスクであるので過去の類似プロジェクトがありません。
専門家による判断
一人ないし複数専門家に意見を仰ぎます。近くに頼りにできる専門家がいれば、この方法で解決できます。しかし、いない場合はどうすればよいでしょうか?
三点見積もり法
楽観値(最も効率よく作業が進んだ場合の値)、最頻値(実際に必要と予測される値)、悲観値(最も作業が遅れた場合の値)の三点から見積もる方法です。しかし、未経験のタスクに対してはこの3つの値を決めることも難しいです。
では、どうするか
結論としては、見積もりから始めるのではなく、調査をしましょう。完全に未知な状態であるから見積もりができないのであれば、既知の状態にしてしまえばよいのです。短く期間を設けて調査し、そこから見積もれば良いのです。その場で見積もりへの回答をせずに時間が欲しいと申し出るのは気が引けるかもしれませんが、根拠のない値を回答するよりはずっとましです。なので、その場しのぎの見積もりは避け、調査の時間を確保することが重要です。
さいごに
ChatGPTに聞いてみました。以下が回答です。最初の項目に「事前調査(スパイク)を行う」と回答していました。
自分はエンジニアです。未経験の技術にはどう見積もりをすれば良いですか?
未経験の技術に対して見積もりを行う場合、以下のようなステップや考え方が役立つことがあります。
- 事前調査(スパイク)を行う: 見積もり前にごく小規模なプロトタイプ(スパイク)を短期間で実施し、未知のポイントを明らかにします。
- 短時間で触ってみることで、実現性や学習コスト、ツールチェーンの整備度を把握できます。
- スパイク結果から、ある程度現実的なタスク分解や学習時間の見積もりがしやすくなります。
- タスク分解し、既知と未知を切り分ける: 「何が既知で何が未知なのか」を明確化します。既知の作業(例えば定型的なAPI実装、環境構築)と未知の作業(新技術への習熟、周辺ライブラリの理解)を分け、未知領域に時間バッファを十分に持たせることで精度を高められます。
- 類似した経験や参考情報を活用: 未経験技術とはいえ、似たようなテクノロジーやプロジェクト経験、あるいは他チームの事例、ネット上のベストプラクティス等から、学習コストや実装コストを大まかに推定します。
- 他社事例やQiita、Stack Overflow、公式ドキュメントの「よくある落とし穴」情報などを参考にします。
- 開発者コミュニティで質問し、概ね何日程度学習や実装にかかったか情報を得ることも有効です。
- 学習コストを見積もりに組み込む: 未知技術の場合、単純な実装工数だけでなく、
- 学習時間(ドキュメント・チュートリアル読解、サンプルコード解析)
- トラブルシューティングやデバッグ時間
- ツールチェーン構築・環境セットアップなどを盛り込みます。これらは想定以上に時間がかかることが多いため、通常の実装よりバッファを増やすべきです。
- 範囲を限定し、見積りを段階的に行う: 最初から大規模なタスクを見積もるのではなく、小さな部分から着手し、段階的に見積もり精度を向上させます。いったん小さめのモジュール・機能で経験を積み、その実績値を元に全体の見積りを再検討します。
- 不確実性を定量化しバッファを持たせる: 不確実性が高い部分に対しては、たとえば「通常の実装タスクより1.5倍〜2倍の時間を確保する」といった形でバッファを確保します。また、開発途中で定期的に見直し・修正できるような柔軟な計画を立てることで、実態に合わせた調整が可能になります。
まとめると、未経験の技術に対する見積もりは、事前の短期調査(スパイク)、既知/未知の切り分け、学習コストやトラブル対応時間の組み込み、参考情報の活用、段階的な見積り精度改善、十分なバッファの確保といった複合的な手段を用いることで、より妥当な精度に近づけることができます。