先日学生に聞かれたんですよ。

「下流工程は大変って聞きますが、上流は楽なんですよね？」

よろしい、君はよく勉強している。でも根本的に間違っている。下流工程が辛いのは、上流工程でちゃんと仕事ができなかったからだ*1。

というわけで、主に学生向きに話を単純化して語ってみます。これが普通だとか、一般的だとか言うつもりはなく、違う視点もあるかと思いますが、一つの考え方として。

SIでのシステム開発は、建設業にたとえられます。が。 顧客の希望を聞き、設計し、施工し、引き渡す。こういった工程を踏む仕事ということで、システム開発はよく建設業にたとえられます。実際に工程管理の手法なども似通っています。ところが、大抵の場合、耐震偽造をした建築物よりもシステムのほうが脆弱に仕上がります。何故でしょうか。

一つには、建物の図面を引くには建築士の資格が必要ですが、システムの設計に資格は必要ありません。

もう一つ、建物は、強度とかの内部構造はお客さんの知ったこっちゃない(建築基準を満たすことは義務付けられていますし)わけで、一方で設備とか間取りとかデザインは設計段階において目に見える形で提示されます。システム開発は、内部構造の基準もありませんし、目に見える部分もなんだかはっきりしませんよ。

さらに大きな違いがあります。建物は、建て始めちゃってから設計変更をするためには一回壊すことが必要ですが、システムは(一見)何も問題なく設計変更することができます。いや、できないんだけど、できます(ぉ

このような違いが悲惨な現場を生むのです。

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

上流工程が破綻する原因は色々ありますし、後になって気付く失敗もあります。 コンサルが出来ないことを出来ると言って仕事に仕立て上げた。「このビルは、空を飛べます！(嘘つきにもほどがある！)」

営業が絶対出来ない予算で取って来た。「１億円あればできます！(土地代だけで１億超えるんだけど…)」

お客さんが何を作りたいか自分でもわかっていない。「うーんと、ほら、都庁みたいなアレ、アレが作って欲しいんだよ…(アレってなんだ？)」

ディテールにこだわるけど肝心なことが何一つ決まらない。「ロビーは大理石で、ドアノブは全部ホテルタイプで…(それより階数とか部屋数を決めようよ…)」

絶対に必要なものを組み込むことを忘れていた。「(そういえば…トイレはどこ？)」

業界では常識かも知れないけど一般的じゃなくて認識相違「客商売なんだから最後に４が付く部屋番号なんてダメに決まっているじゃないか！」

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

でも、トイレいらなくね？ お客さんは、システムとして何が重要なのかわかりません。たとえ本来の目的(主に業務要件)ではなくても必要なもの(主に機能要件)というのはあります。これを忘れてしまうと大変なことになりますが、できるだけ安く作ろうということで、その大事なものがコスト削減の対象になっちゃったりします。いや、なくちゃダメなんだって。

その必要性をお客さんに認識させるのがエンジニアのコミュニケーションスキルの見せ所(そう、勘違いしてはいけませんが、SEに必要なコミュニケーションスキルとはお客さんと仲良くなることではなくて、大切なことを種々の手段で納得させることを指します)です。これがすごい大変。もう泣くほど大変。バカなお客さんも大変ですが、賢すぎるお客さんも大変です。あと、やたらこちらを信頼してくれるのはいいけどわからないことは教えてください…

というわけで、なんだかんだいって、トイレを図面に書くことが許されないこともあります。

配管工事くらいはしておこう 「じゃあいいよいらないんだろ！」なんて逆切れしてトイレのない建物をお客さんに渡してみたいものですが、システムは納品のときに検収やユーザーテストというものがあって、そこで欠陥が発見されると「こんなもの使えるか！」みたいに拒否られてしまうのです。なんと理不尽な！。で、大抵トイレがない建物のダメさ加減は使ってみれば気付くわけです。さて、お客さん、どうするか。「トイレがない建物なんて使えるわけがないだろ！」もはや逆切れです。言った言わないの水掛け論。先に言質をとっておけばよいのですが、お客さんに「トイレいらないんですね！一筆書いてください」なんて言えないこともあります。ああ、立場が弱い僕達。

でも、あとで言われるのなんてわかっているじゃないですか。水周りの工事なんて、一度やったら直すことは困難ですから、事前に拡張性の高い設計をしておくことでリスクを最小限にすることができます。

ああ、お客さんの声が聞こえてきますよ。「なんでトイレがないんだー」はいはい、何とかしますから。

ここで追加料金が取れるのがいいお客さんです。そりゃそうだよ、要らないって言ってハンコ押してんだから。

たまに、どうしても予算が取れなくて、とか、全部システム屋側のせいにしてお金を出さない客もいます。でも、そこで無償で対応しちゃうとシステムなんてそんなものって勘違いされるんですよね。そして、頑張ってしまって出来てしまうと、「ほら、できるじゃん」といわれてしまうのです。いや、確かに出来たけど、地上３０階の非常口の向こうにロープを伝っていかないとたどり着けない空中トイレとか、行きます？