技術とか戦略とか

SIerで証券レガシーシステムを8年いじってからSESに転職した業務系エンジニアによる技術ブログ。

要件が不明確な場合は慎重に見積を行うべきである

経営や営業の都合では、開発者が直感に基づいて迅速に案件の見積をしてくれると助かります。
見積が早く出てくれば、案件の優先順位付けや案件の受注もスムーズに進むようになり、利益も出しやすくなります。
 
要件が明確で見積時点で具体的な実装がイメージできるようであれば、これで問題無く回ります。
しかし、ここに要件が不明確な案件が混ざり込んだ場合、見積時には想定していなかった要件調整や影響範囲拡大が発生し、見積から大きく工数が膨れ上がり、利益が出ず長時間労働を強いられる炎上案件と化してしまいやすいです。
(要件が明確かどうかは、コードに落とし込めるレベルで実装をイメージできているか否かで判断すると良いです)
 
このような見積誤りを防ぐためには、一つの開発者が直感で見積を行っている状態から脱する必要があります。
一般的に見積に時間がかかるようにはなりますが、そこで時間をかけることで案件が炎上するリスクを減らすことができるため、時間をかけるだけの価値はあります。
 
具体的には、以下のような方法により、見積の誤り(過小見積)を減らしやすくなります。
 
・複数人で要件読み合わせや積算レビューを行う
 それぞれの開発者には得意不得意や経験の違いがあるため、
 見積時に感じやすいリスクにも違いがあります。
 そこで、複数人で要件読み合わせや積算を行うことで、
 事前に見つけるべき要件の問題点や影響範囲拡大の可能性を見つけやすくなります。
 
・客観的な見積手法を用いる
 具体的には、ボトムアップ見積や類推見積といった手法です。
 これらの客観的な見積手法を用いた場合、
 見積に時間がかかるようになり、
 またある程度は直感に頼らざるを得ない面もありますが、
 積算時に見つけるべきリスクに気付くきっかけを得られます。
 
・後工程での再見積を提案する
 要件が不明確な案件では、積算と実際の工数にブレが生じやすいです。
 要件の不明確さがクリアされブレが生じにくくなった段階で精度が高い見積を出す、
 ということが可能であれば、それを提案した方が良い場合もあります。
 
・直感で出した見積に一定の係数をかける
 どうしても積算に時間がかけられないのであれば、
 積算時に見落としが発生することを見越して、
 直感で出した見積に一定の係数をかける、という方法もあります。
 あくまでも個人的に見聞きした範囲ですが、
 一般的には1.5~3.0倍の係数をかけると上手く行くことが多いようです。
 不確実性コーンの理論では最大4.0倍の工数上ぶれが発生するので、
 係数は最大でも4.0倍とするべきでしょう。