なぜ、あなたの工数見積もりは間違っているのか


きっとあなたは、開発工数の見積もりに失敗した事があるでしょう。
もし無い方がいればメッセージください。
もちろんその方は残業をしたことは無いのでしょう、
[残業をしてる]=[あなたの見積もりはまちがっている]
当たり前ですよね、あなたがお客さんに出した見積もりに残業代は含まれていないのですから。

そもそもなぜ見積れるのでしょうか?

ソフトウェア開発だけではなくもっと広いくくりで、なぜあなたが何かを測ることが出来るのかを考えてみましょう。
・なぜあなたは、自分の身長を測れるのですか?
・なぜあなたは、自分の体重を測れるのですか?
・なぜあなたは、自宅から最寄り駅までの距離を測れるのですか?
・なぜあなたは、そのソフトウェアの開発工数を測れるのですか?

それは物差しがあるからです。

ではソフトウェア開発工数を見積もるための物差しは何でしょうか?
それは過去の経験です。

過去の経験があるから、ソフトウェア開発の工数を見積もることが出来ます。
過去の経験で、「あの開発はこれくらいだった」というものを物差しにして、開発工数を見積もります。

逆に言えば、過去の経験が無いものは見積もれないと言うことです。

そもそも開発工数は見積もることができない

大前提として私たちは、開発工数を見積もる事が出来ないということを理解しなければなりません。
もし完璧に見積もることが出来るのであれば、あなたが扱っているシステムは10年以上前のものを利用していることでしょう。

上でも書きましたが私たちは、過去の経験を物差しとしてしか、見積もる事ができません。
では完璧に見積もるにはどうしたら良いのか。
全て過去に開発したことのある、機能、技術で固めるしかありません。
おそらくこれをやってる会社があるとすれば、大手SIerでしょう。
大手SIerは確実な工数見積もりを求められるからです。
しかしその代償に10年前の仕組みを使い続けているのでしょう。

私たちがやっていることは、より新しく、効率の良い技術を使い、よりスピーディーに価値のあるものを提供し続けることではないでしょうか。
そうする為には、使った事ない技術を使う必要があり、作ったことのない機能を作る他ありません。
では、その工数は見積れるのでしょうか?
見積もれません
過去に経験したことがないからです。
わたしはエンジニアは過去に経験したことの無いことに挑戦し続ける生き物だと思っています。

どうやって見積もるのか

見積もれないというのは理解頂けたかと思います。
しかしあなたの現場で見積もらないわけにはいきませよね?
ではどうやって見積もれば良いのかをご説明します。

余分に見積もる

なんだよそれと思ったと思いますが、私はこれ以上の方法を知りません。
知っている方がいれば教えてください。

では何に対して余分に見積もるのでしょうか。

1.技術的課題&実装が明確でない箇所

技術的課題、実装が明確で無い箇所がある場合は、大きく見積もりに影響してくる可能性が高いため、こういった箇所が多い場合は、その分かなり多めに見積もりを出す必要があります。
私の感覚的に、大体これくらいの実装でできるかなと想定する工数の3倍の工数で算出します。

例えば、あるライブラリーを使うことを想定していた箇所が、何かしらの要因で使えず、そのライブラリーの機能を作らなければならないとなった場合、3倍の工数では済まないでしょう。

2.お客様の追加要件に応える余地

お客様というのは、物が具体的に見えてくると、様々なアイデアや要望が湧いてきます。
これはお客様が悪いわけではありません。
人間とはそういうものなのです。
絶対に開発途中で要望が出てきます。なので予め、それに応えるための余地を開発工数に含めておくということです。
事前にお客様との取り決めの中で、「この機能以外の追加の要望は再見積もりさせて頂く」と決めておいても良いと思います。
しかし、追加の要望があるたびに、再見積もりとなると、お互いに仕事がやりづらくなってしまいます。
なので予めある程度の要望を加味した見積もりにしておくことをおすすめします。

結局どれくらいで見積もればいいの

私の感覚値では、最初にこれくらいで出来るかなと思った1.5倍の工数で出します。
もちろんこれは、どれくらい技術的課題、実装の不明瞭なところがあるかによって大きく左右されますので、自分のプロジェクトではどうかなと考えて見てください。

もちろんこれは受託案件等の場合です、自社プロダクトでは社内政治の状況によるかと思うのでその辺はよしなに。。。
もしこれでも、工数がオーバーしてしまうなら、素直に謝罪し、納期を伸ばしてもらうか、機能を減らすかしか道はないです。
増員という選択肢もあると思いますが、そのプロジェクトに一切関わっていなかった人をジョインして状況が改善するとは思えません。相当優秀な人を入れれるなら話は別ですが、なかなかその様なことはないと思います。

開発の進め方

私の今まで所属してきた現場では全て、納期前になるとエンジニアが残業しています。
この状況に正直ウンザリです。
ほんと学ばないなと思ってしまいます。

私は開発の進捗を常に超余裕の状態で進めます、なぜなら超余裕で進めたとしても、最終的には納期ぴったりになることがほとんどだからです。
さらに、追い込まれてギリギリで納期間に合わせるのと、余裕を持って納期に間に合わせるとでは、質の部分でどっちが上回ると思いますか?
これは言うまでも無いでしょう。

なので残業するタイミングが大事です。
残業するタイミングは超余裕の進捗では無くなった時です。
超余裕の状態になるまで残業してください。
納期前で、残業してしまうとそこでもう限界までやってしまっているので、それ以上調整する余地が無いです。
常に超余裕状態で進めていれば納期前でも大きく調整できる幅があります。
そのため納期に間に合わなくなる可能性が大幅に減ります。

まとめ

・そもそも開発工数は見積もる事が出来ないため、大幅に余裕を持った見積もりを提示する
・最終的には納期ぴったりに落ち着くため、常に超余裕状態で開発を進める。
・納期前に調整できる幅を確保するために、残業のタイミングは超余裕でなくなったタイミング。