SI業界を目指す君達へ贈る「何故システム開発はテンパるのか」

先日学生に聞かれたんですよ。
下流工程は大変って聞きますが、上流は楽なんですよね?」
よろしい、君はよく勉強している。でも根本的に間違っている。下流工程が辛いのは、上流工程でちゃんと仕事ができなかったからだ*1
というわけで、主に学生向きに話を単純化して語ってみます。これが普通だとか、一般的だとか言うつもりはなく、違う視点もあるかと思いますが、一つの考え方として。

SIでのシステム開発は、建設業にたとえられます。が。

顧客の希望を聞き、設計し、施工し、引き渡す。こういった工程を踏む仕事ということで、システム開発はよく建設業にたとえられます。実際に工程管理の手法なども似通っています。ところが、大抵の場合、耐震偽造をした建築物よりもシステムのほうが脆弱に仕上がります。何故でしょうか。
一つには、建物の図面を引くには建築士の資格が必要ですが、システムの設計に資格は必要ありません。
もう一つ、建物は、強度とかの内部構造はお客さんの知ったこっちゃない(建築基準を満たすことは義務付けられていますし)わけで、一方で設備とか間取りとかデザインは設計段階において目に見える形で提示されます。システム開発は、内部構造の基準もありませんし、目に見える部分もなんだかはっきりしませんよ。
さらに大きな違いがあります。建物は、建て始めちゃってから設計変更をするためには一回壊すことが必要ですが、システムは(一見)何も問題なく設計変更することができます。いや、できないんだけど、できます(ぉ
このような違いが悲惨な現場を生むのです。

トイレはいらない?

人の生活する建物を立てるのですから、必要最低限の設備というのは自動的に決まります。出入り口がなかったり、密閉されて呼吸が苦しかったり、30階建てなのにエレベーターついてないとか、そういうナンセンスな建物はまずありません。というか、絶対ありません。ましてやトイレがないなどと。というわけで、今後必要だけど足りないものをトイレにたとえることにします。
しかし、システム開発でままあるのは「トイレ?そんなのいらないってコンサルが言ってたよ!次世代インテリジェントビルなんだから!」なんてお客さんがいたりするところです。常識的に考えて、トイレがいらないわけないですよね。どんな無人ビルだそりゃ。
あと、お客さんもシステム屋さんも、図面にトイレが書かれていないのに気付かなかったりすることもあります。そりゃエンジニア失格なんだけど、いろんなことに振り回されるとつい些細なことを忘れてしまったりします。いや、些細じゃない!

上流工程のお仕事

というわけで、お客さんの要望を漏れなく汲み取り、あるいは常識的過ぎて忘れているものを思い出させてあげたり、インテリジェントな機能を提案したり、防犯対策や災害対策をきっちり考えたりすることが上流工程の仕事です。
上流工程が破綻する原因は色々ありますし、後になって気付く失敗もあります。

  • コンサルが出来ないことを出来ると言って仕事に仕立て上げた。「このビルは、空を飛べます!(嘘つきにもほどがある!)」
  • 営業が絶対出来ない予算で取って来た。「1億円あればできます!(土地代だけで1億超えるんだけど…)」
  • お客さんが何を作りたいか自分でもわかっていない。「うーんと、ほら、都庁みたいなアレ、アレが作って欲しいんだよ…(アレってなんだ?)」
  • ディテールにこだわるけど肝心なことが何一つ決まらない。「ロビーは大理石で、ドアノブは全部ホテルタイプで…(それより階数とか部屋数を決めようよ…)」
  • 絶対に必要なものを組み込むことを忘れていた。「(そういえば…トイレはどこ?)」
  • 業界では常識かも知れないけど一般的じゃなくて認識相違「客商売なんだから最後に4が付く部屋番号なんてダメに決まっているじゃないか!」
  • その他諸々

最初の二つはともかく、それ以降の話はSEの本分で、こういった問題を起こさず、何が必要なのか、自分の常識に囚われていないか、大事なものを見落としていないか、というのを探っていくのが仕事なのです。お客さんは基本的に素人ですから、システムに何が必要なのかを本当にはわかっていません。だから、目的をはっきりさせて、その実現方法をしっかり提示することが上流工程の仕事です。

でも、トイレいらなくね?

お客さんは、システムとして何が重要なのかわかりません。たとえ本来の目的(主に業務要件)ではなくても必要なもの(主に機能要件)というのはあります。これを忘れてしまうと大変なことになりますが、できるだけ安く作ろうということで、その大事なものがコスト削減の対象になっちゃったりします。いや、なくちゃダメなんだって。
その必要性をお客さんに認識させるのがエンジニアのコミュニケーションスキルの見せ所(そう、勘違いしてはいけませんが、SEに必要なコミュニケーションスキルとはお客さんと仲良くなることではなくて、大切なことを種々の手段で納得させることを指します)です。これがすごい大変。もう泣くほど大変。バカなお客さんも大変ですが、賢すぎるお客さんも大変です。あと、やたらこちらを信頼してくれるのはいいけどわからないことは教えてください…
というわけで、なんだかんだいって、トイレを図面に書くことが許されないこともあります。

配管工事くらいはしておこう

「じゃあいいよいらないんだろ!」なんて逆切れしてトイレのない建物をお客さんに渡してみたいものですが、システムは納品のときに検収やユーザーテストというものがあって、そこで欠陥が発見されると「こんなもの使えるか!」みたいに拒否られてしまうのです。なんと理不尽な!。で、大抵トイレがない建物のダメさ加減は使ってみれば気付くわけです。さて、お客さん、どうするか。「トイレがない建物なんて使えるわけがないだろ!」もはや逆切れです。言った言わないの水掛け論。先に言質をとっておけばよいのですが、お客さんに「トイレいらないんですね!一筆書いてください」なんて言えないこともあります。ああ、立場が弱い僕達。
でも、あとで言われるのなんてわかっているじゃないですか。水周りの工事なんて、一度やったら直すことは困難ですから、事前に拡張性の高い設計をしておくことでリスクを最小限にすることができます。
ああ、お客さんの声が聞こえてきますよ。「なんでトイレがないんだー」はいはい、何とかしますから。
ここで追加料金が取れるのがいいお客さんです。そりゃそうだよ、要らないって言ってハンコ押してんだから。
たまに、どうしても予算が取れなくて、とか、全部システム屋側のせいにしてお金を出さない客もいます。でも、そこで無償で対応しちゃうとシステムなんてそんなものって勘違いされるんですよね。そして、頑張ってしまって出来てしまうと、「ほら、できるじゃん」といわれてしまうのです。いや、確かに出来たけど、地上30階の非常口の向こうにロープを伝っていかないとたどり着けない空中トイレとか、行きます?

無理な拡張は建物全体の信頼性を落とす

というわけで、上流工程の失敗により、やたらと補修・拡張を繰り返す悲惨な建物。もはや当初のデザインは陰も形もなく、余分なところに予算を使ってしまったので入り口もずいぶんとみすぼらしくなりました。どうも隙間風とか雨漏りとかもしそうですし、上のフロアの騒音がダイレクトに響いてきます。あーあ。
おまけに、変な出っ張りとかがくっついているせいで風ですごくゆれるし、なんか変な共振みたいな音が聞こえます。
エレベーターもなんか引っかかる感じですし、非常階段の踊り場が書庫になってたりします。
ああっ、そのボタンは押しちゃダメなんです。ダメったらダメ!

それでもなんか感謝されてるよ

「いやあ、やっぱり新しい建物はいいねえ」そうですか。良かったです。でも、多分その建物は不便なんです。でも、満足してもらえたらいいんです。ただ、何人も工事中の事故で…残業して遅くなったら出ると思いますよ、何かが。


まだ他にも管理の問題とか、実力の問題(身の丈の問題)とか、いろんな問題が合わさってシステム開発はテンパります。でも、やっぱり一番大きいのは、どういうものを作りたいか、その為に何をしなければならないか、というのがイマイチわかりづらいということでしょう。これはシステム屋さんにおいても、お客さんにおいても同じです。SI事業者の、そしてSEの仕事というのは、要望をきちんと捉え、それを設計に落としていくことなのです。これを出来る能力というのを客観的に保障する指標がないことも原因ですし、出来上がってきた設計図から必要な要件が満たされていることを把握できない(設計書の問題もあるけれど、理解力の問題もある)ことも問題です。そして、安易に作り変えが出来ると思っていることが最大の間違いです。
きちんと、決めるべきことを決めるべき期限までに決めていくことが大切です。そして、追い詰められるとつい手抜き工事をしてしまいがちですから、余裕のあるスケジュールで仕事を進めるのが肝心です。
そんなに上手くいくものではありませんけれども、これからどんどんこういった点は改善されていくと思います。上流が上手くいけば下流だって楽に出来るんですよ。デスマーチなプロジェクトは大抵上流がメタメタです。下流だけの問題はアドホックな対応で何とかなるものです。作業者に恨まれないような仕事の進め方をしたいものですね。
興味があったら以下のような本も参考にしてみてください。

デスマーチ 第2版 ソフトウエア開発プロジェクトはなぜ混乱するのか

デスマーチ 第2版 ソフトウエア開発プロジェクトはなぜ混乱するのか

追記:フォローエントリ

今後書くフォローエントリはここに追記していきます。
その1:SI関連業界の諸君、共感してないで学生を呼び込もう! - novtan別館

*1:いろんな意味でね。