なぜシステム開発はうまくいかないのか

システム開発がうまくいかない理由とは何か

システム開発は往々にしてうまくいかないもので、要因は複数ある。

それを端的に表した絵があったのでご紹介する。

何やら木にブランコが吊るされているが、これが開発するシステムを示しているらしい。

順を追ってみていこう。

クライアントの要望

まず左上の絵。

木にブランコがぶら下がっている。

クライアントは木にブランコをぶら下げて遊びたいのかな、という感じ。

ここで気になるのはブランコが三段になっていること。

明らかに過剰な機能を要求している。

システム開発には良くあることで、このように一番初めの時点でピントがずれていることが良くある。

また、最後のオチになるのだが、ここですでに致命的な問題が発生している。

プロジェクトリーダーの考え

続いてプロジェクトリーダーの視点。

この時点でクライアントの要望とずれている。

木にブランコがぶら下がっているのはあっているが、これだとブランコを揺らして遊ぶことができない。

これも良くあるケースで、クライアントが当たり前と思っていても、開発者側はそれを汲み取ることができず、開発末期になって判明するという惨事が起きることがよくある。

特に開発するシステムに専門的な知識が必要な場合によくあるケースだと思う。

この場合は、クライアントとしては「ブランコなんだから揺らして遊べるのは当然でしょ」という気持ちなので、「揺らして遊べるようにしてください」と明示的に説明してくれない。

しかし、「ブランコ」が専門的な機能だった場合、「揺れる」ということは聞かなければわからない。

ここで双方の認識に齟齬が生じたまま開発が進んでしまう。

アナリストの見解

次にアナリストの見解について。

私はあまりアナリストになじみはなく、上流工程についてはプロジェクトマネージャーがその仕事をしていたことが多い。

この図から察するに、前回の絵ではブランコが揺れないことに気付いたため、揺れるように改良したのがわかる。

ただ、かなり無理やりである。

風で倒れそうだし、明らかに脆弱なシステムになってしまっている。

プログラマの実装

続いてプログラマの実装した絵が以下である。

ここでもコミュニケーション不足があったことがわかる。

木があり、そこにブランコが吊るされているのはあっている。

が、これだと明らかにクライアントの要件を満たさない。

プロジェクトマネージャーから実際の開発者への伝達不足で、良くこういうことがある。

開発者側は「言われたことをやっただけです」と言うし、プロジェクトマネージャーは「それくらい読み取って作ってくれ」という言う。

どっちもどっちで、お互いが密にコミュニケーションをとり、一人一人が責任感をもって取り組まないとこういう結果になる。

営業の約束

続いて、営業担当がクライアントに約束したことを表した図。

ブランコの上に明らかに必要なさそうなリッチな椅子が置かれている。

営業担当者はなんとか案件を受注しようとこのような過剰な機能を謳ってしまうことがある。

そして、クライアントから開発後期に、「そういえば営業の方からこういう機能もできますと聞いてますが状況はどうでしょうか。」といきなり連絡がくるのである。

そんなこと聞いてないといっても後の祭りである。

これによってクライアントとの関係が悪化したことは多々ある。

プロジェクトの書類

キックオフ前には書類を配置するフォルダも作って、これからドキュメントもしっかり充実させるぞ!と息巻いていたが、現実はこうである。

ブランコはおろか木すらない。

IT業界は人の出入りが激しいので、一つのシステムの運用が終了するまでずっと当初の開発者がいるということはまずありえない。

そのため、引継ぎをスムーズにするためやクライアントとの認識を合わせるためにも、ドキュメントはとても大切になる。

しかし、いざ開発がはじまると、バグの対応やクライアントからの追加の要望などでドキュメントを作っている暇はない。

そして、後々の大きな負債になっていくのである。

実際の運用

無事にシステムがリリースされて実際の運用が始まった絵が以下である。

なんとも惨い状態になっている。

なんとか木からロープは吊るされているので、これにぶら下がって揺れることはできそうだ。

おそらく、納期に間に合わず、ブランコをとりつけることに断念し、直接ロープにぶら下がるという荒業で実運用をこなしているのだろう。

まさに綱渡りである。

クライアントへの請求額

実際にクライアントへ請求した額を表した絵がこちら。

木にブランコをぶら下げるだけなのに、何やらジェットコースターを作ったのと同じ金額を請求したようだ。

実際には、クライアントはこんな請求は受け入れないと思うので、開発側のコストが膨大になったことを比喩しているのかもしれない。

得られたサポート

実際にシステムを運用してみて得られたサポートの絵。

切り株だけが残っている。

木からぶら下がったロープにしがみつくのが大変になったため、木を切り倒して切り株に座ることを選択したのだろうか。

もはや当初の原型はほとんどない。

最後に

それではいよいよ最後。

クライアントが本当に必要だったもの、という絵である。

木からロープが垂れており、その先にタイヤが結び付けられている。

木の板のブランコではなく、そこ等へんに落ちているタイヤを付ければ要望を満たせたのである。

タイヤならコストも低い。

クライアント自身が必要とするものを分かっていなかったということを意味している。

そんなことあるわけないと思うかもしれないが、こういうクライアントは実は大勢いる。

どうすれば良かったか

以上の絵と自らの経験を踏まえて、システム開発をする上で心得ておくことは以下だと思う。

  • クライアントの要望を鵜呑みにしない、任せきりにしない
  • 早めにクライアントを巻き込む
  • 定期的にクライアントに画面やシステムの使用感を確認してもらう
  • 開発者一人一人がプロジェクト全体のことを考えて行動する意識をもつ
  • あいまいなことをそのままにしない