勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

ソフトウェア開発プロジェクトは「負ける」宿命なのか

「どうやったらプロジェクトの失敗を防げるか」について話していたら、後輩の一人が面白い事を言った。「システム屋は最初から負けている」。くわしく聞くと、こういうことらしい。

  • ソフトウェア開発プロジェクトの総予算は早い段階で確定していて、増額は困難である。
  • 早期に全ての要求を見通すことは不可能であり、プロジェクトを始めていくとスコープは少しづつ増えていく。原価も増えていく。
  • プロジェクトを開始した以上、途中でバスを降りることは不可能である。収益が悪化しても走り続けるしかない。
  • 故に、われわれシステム屋は「負ける」宿命を負っている。

いろいろとツッコミどころはあるのだけれど、想う所を整理してみたい。

じゃあビジネスアジャイルだ、ということではない

アジャイル脳的な反応が容易に予測できる。

  • 最初に大きく計画し一括で開発しようとすること自体が誤り。リスクを極小化しビジネス価値を最大化するために、アジャイルにソフトウェアを開発するべき
  • ソフトウェアの要求を初期にすべて明確化することは不可能である。要求は変化する前提で常に判断しながら開発していくのが最適である

もちろんこれらの意見は正しいのだけれども、これらはお客様がビジネス上の判断として選択すべきものであり、開発者が選択を迫るべき事柄ではないと考えている。ビジネスアジャイルは顧客(発注者)サイドが開発リスクを負う必要もある。開発者(受注者)の立場から強く推進する類のものではないというのが私の考えである。

予算と見積り、スコープ

不幸なプロジェクトを生む原因の一つに、見積りと予算の関係の取り違えがあると思っている。顧客側がソフトウェア開発に不慣れな場合や、新米のプロジェクトマネージャは見積り=予算としがちだ。実際には見積もりは「プロジェクトにかかる期間やコストを予測」することであって、コミットメントではない。また、プロジェクトには必ず不確実性があるのだから、見積もりどおりにプロジェクトが完了することは絶対に無いということをまず前提とすべきだ。

だから、必ずプロジェクトの予算にはリスクに見合ったバッファ(予備予算)を用意しておく必要がある(それを顧客側に留保してもらうのか、見積もりに含めるのかは別の話)。

とはいえ、実際のところは世の中はそう簡単ではなくて、必要なだけのバッファ(予備予算)を用意しておくことは難しいことが多い。開発するソフトウェアが生み出す収益(費用対効果)や顧客のビジネス状況、発注者の競合などによって常に予算に対してはプレッシャーがかけられているからだ。では、どうすれば良いのだろうか。

  • 一番簡単なのは、(受注者側の)見積もりに十分なバッファを組み込んでおくことだ。わたしはリスクが大きいプロジェクトであれば極端な話、1回すべてソフトウェアを作りなおすほどのコストを準備しておく(それでも「時間は金で買えない」のだがら分の悪い勝負ではある)。これは極端な話としても、開発するソフトウェアのコア部分(10%~20%)くらいを作り直すくらいの考慮は必要だと思う。パフォーマンスや品質の観点から、実際にはそれくらいの作り直しが発生することはよくあることだと思う。
  • バッファ(予備予算)の調整が出来ないのであれば、スコープの調整が可能かどうかを分析する。ソフトウェアの真の目的を達成するための要求事項は削減できないけれども、付加価値的な要求や機能の削減は出来るかもしれない。その割合が半分より多ければ(もちろん調整は茨の道であっても)見積もり以内の予算でソフトウェアを完成する可能性は大きく高まる。
  • 予算外で利用可能なリソースを確認しておく。顧客側の体制・動員力や自社の余剰人員などを(交渉は大変であっても)利用可能かどうかを見極めておくと、いざというときの妙手として利用可能であったりする。

もちろん上記のような打ち手を使わずに確実にプロジェクトを遂行することが望ましいのは言うまでもないが、プロジェクトの目標達成という意味では考えておくべき話題であると思う。

ソフトウェア開発プロジェクトは「負ける」宿命なのかどうか

とはいえ、やはりソフトウェア開発プロジェクトは「負け」やすい宿命があるとは思っている。

  • ソフトウェアの特性から、プロジェクトの成功には限りがあるが、失敗には限りがない。うまくいっても10%の生産性向上とかが関の山だけれども、失敗すれば200%のコストがかかったりする。成功と失敗が非対称であることは忘れられがちだ。ソフトウェア開発プロジェクトは「ブラックスワン」で言うところの「最果ての国」に属している。
  • ソフトウェア開発を取り巻く闇はいまだに深い。われわれの問題はこの40年の間に少しも解決されていない

問題は、これをどう考えるかだと思っている。個々人が技芸を高めて「負けない」ソフトウェア開発を目指して取り組んでいくのか、それとも去るのか。わたしは「負けない」を目指していきたいと考えている。