開発プロジェクトにもう一度取り組んだら完璧に成功するか?

一つの思考実験として考えてみる。完了した開発プロジェクトのアウトプットを消去して、同じプロジェクトに同じ開発者が再度取り組んでみるとする。開発者の頭の中に様々な情報(記憶)は有るので、開発プロセスへのフィードバック結果やエンジニアリングの経験は使って良い。但し、仕様書やソースコード等の成果物は、コピー&ペーストが出来ないように全て消してしまうものとする。

ここで問題。

この再実行プロジェクトは完璧に成功するのだろうか?

最初の開発において、たくさんの障害が発生したはずだし、手戻り作業も少なくなかったはずだ。仕様書の記載ミスもあったはずだし、仕様の誤解を巡るトラブルもあっただろう。期待通りの性能が出ないとか、予期せぬ問題に直面して予算が超過したり、開発工程の延長も有ったかもしれない。2度目の開発プロジェクトにおいて、これらの問題は一切発生せず、全ての作業は予定通りに進行するのだろうか?

最初の開発で見つかった問題に対して行われたフィードバックが全て有効に機能しているのなら、問題は一切起こりえないハズだ。

  • 開発プロセス、工程管理、人員配置、予算配分は最初から完璧であり、開発工程途中での見直しは全く起こらない。
  • 仕様書記載のチェックリスト、レビュー方法は改善済みだから、仕様の漏れや矛盾の無い完璧な仕様書が出来上がる。
  • コーディング規約の追加、コードレビュー方法の見直し、単体テストコードの追加により、完璧なコードが出来上がる。
  • 見直しを行ったテスト手順書を使って、完璧なコードを検査するのだから、テストで問題が見つかるわけ無い。
  • 反省すべき材料が無いので、振り返りでは改善項目が見つからない。

ここで再び問題。

本当に一切の障害が発生することなく、完璧なソフトウェアは出来上がるのだろうか?

実際に実験したことは無いし、単なる推測に過ぎないけれど、完璧なソフトウェアは作れないと思う。最初の開発よりはマシになるとは言え、それなりに同じ問題を繰り返すような気がする。改善したはずの仕様書は別の問題を引き起こし、書き直したはずのコードは以前見逃していた問題を顕在化させてしまい、確認項目を増やしたはずのテスト項目は新しく加わった変更に対応出来ず、問題はいろいろ発生しそうだ。前回発生した障害を根絶出来るとは到底思えず、せいぜい半分程度の問題発生を抑え込むのが精一杯ではないだろうか。

こんな言い方をしてしまうと身も蓋もないけれど、フィードバックを実施した結果が生かされるのは、実は限られた範囲に過ぎないのかも知れない。最初の開発で得られた「ドメインの知識」「エンジニアリングの知恵」「プロセス改善のネタ」は有効に使えるかも知れないが、これを全て覚えておいて完璧に実践するのは少々難しそうだ。同じ開発者が作業してもこの程度なのだから、別の開発チームが実行してみたら問題の再現率(?)はぐっと高まるようにも思う。問題が起こったり、振り返りを行う毎に「次回こそは」と決意するけれど、その決意が本当に生かされているのかかなり怪しい。皆さんは、2回目の開発プロジェクトなら完璧に実行出来ますか?