ソフトウェア開発における見積もりはあくまで予測

TODO: 時折言葉が強い部分が強く攻撃的に感じられる表現があるので改善したい

主語を大きく「ソフトウェア開発」としてしまったが、厳密にはアジャイルを採用しているソフトウェア開発の見積もりについての言及である。

見積もりをどうしても間違うことが問題なんじゃない(まあ実際、間違えてしまうわけだし)。問題は、見積もりは本来そこにありもしないものを読み取ってしまうことーーつまり、見積もりを本来の正確な予測と思い込んでしまうことにあるんだ。

アジャイルサムライ――達人開発者への道より

私はこの言葉に強く共感する。ソフトウェアエンジニアであれば、この内容に頷ける人も一定数いるのではないだろうか。

私個人としては、アジャイルを採用しているソフトウェア開発に限らず、ウォーターフォール開発においてもこの認識は重要だと考えている。

ここで言う「見積もり」とは、予算や納期のことである。

見積もりを未来の正確な予測と捉えてしまう人は、ビジネスサイド1の人に多いように感じる。

私はビジネスサイドの人と対立して主張を通したいわけではない。実装の見積もりは本当に難しいということを理解してほしいのだ。

私が見積もりが難しいと感じる理由は、主に以下の2点である。

  • ソフトウェアのプログラムをすべて把握するのは不可能に近い
  • 実装してはじめて分かることや、壁にぶち当たることがある

また、ウォーターフォール開発の場合、納期に向かって開発を進めるため、見積もりを誤ると内部品質(特に保守性)を犠牲にして開発を進めざるを得なくなる。

この状況は、あまり良いとは思えない。

なぜなら、内部品質を犠牲にしてソフトウェアを構築すると、後々の機能追加に時間がかかったり、バグの発見が遅れたりして、結果的にコストが大きくかかってしまうからだ。

私の実体験からも、納期が逼迫した現場では、保守性を犠牲にする具体例として、コードレビューを疎かにしてしまうことがよくある。

見積もりを未来の正確な予測と捉えてしまうと、良いソフトウェアを継続的に開発するのは難しいのかもしれない。


  1. ここでビジネスサイドという表現で対立するような表現になってしまったが、揶揄しているのではなく他の言葉が思い浮かばなかったので、プログラマとではない人として、このような表現になっていることを了承してもらいたい。