「失敗」プロジェクトは結構多い

弊社はシステムの受託開発で売上・利益の大半を得ている会社です。ただ、過去に関わった全てのプロジェクトが成功に終わったかというと、そうではありません。

「成功」の定義にも色々あると思いますが、ここでいう「成功」は

  • お客様のビジネス上の課題が解決されたか
  • 投下した予算がそれに見合っていたか

を指す事とします。

逆に言うと、弊社が契約上の責務(機能・品質・納期等)を完璧に果たしていたとしても、出来上がったシステムがお客様の課題を解決していなければ、プロジェクトとしては失敗と言えます。

そして、システム開発及び外注の経験が少ない会社様の方が、そうした失敗をより多くしてしまう傾向にあります。

本記事では、そうした会社様向けに、システム開発の外注に失敗しない方法を説明します。

言い訳・補足

過去に弊社が関わった全ての失敗プロジェクトは、全ての点において弊社以外に責任があった、と主張しているわけではありません。

弊社には経験豊富な技術者、PM が揃っていますが、彼らも人間ですのでミスを犯す事は当然あります。過去の失敗プロジェクトのいくつかでは、弊社としてもう少しうまくやれた部分もあったと思います。

ただ、開発会社側の失敗は、発注元でうまくリスクヘッジしたり緩和したりできる事が多いのですが、発注元の失敗を開発会社でカバーするのは一般的にかなり困難であるという非対称性があります。

また、エンドのお客様から弊社に対して直接開発を外注している場合は、失敗につながりそうな点などは弊社からアドバイスをしたりして極力避けるようにしているのですが、間に別の開発会社様が入っている場合などは、弊社としてどうしようもないケースが多いです。

前置きはこれくらいにして、まずは重要度の高い事柄から順番に説明していきます。

絶対に守るべき事

最初の発注で予算を使い切らない

最初に例を考えます。

  • A, B, C, D という4つの機能を持ったシステムを作りたい
    • 優先順位はAが一番高く、Dが一番低い
    • 少なくとも A, B の機能が無いと、システムとして無意味
  • 予算は300万円

開発会社に見積もりを依頼して、以下のような見積もりが出てきたとします。

  • A機能: 100万
  • B機能: 100万
  • C機能: 100万
  • D機能: 50万

このとき、どのような発注をすべきでしょうか。

やってはいけないパターンとしては、以下のように予算を使い切る事です。

  • A, B, C機能を300万で発注する
  • 値切って A〜D機能を300万で発注する
  • 内部で追加予算を取って A〜D機能を350万で(あるいは少し値切って320万とかで)発注する

なぜでしょうか。システム開発は、そもそもの性質として不確実性の高いものです。最初に予算を使い切ってしまうと、以下のような点に対応出来ません。

  • 開発していくうちに、新規の E 機能というのが業務に必須である事が判明した
  • 開発完了後に、A機能はそのままだと使えず、実際には仕様を少し変更したA’機能が必要である事が判明した

従って、以下のようにするのが望ましいです。

  • A, B機能を200万で発注する

予算が残っていれば、予想外の出来事にも対処しやすいものです。そして、システム開発には予想外の出来事はつきものです。

全部の機能を一度に作ろうとしない

前の項目と少し関連しますが、いくら予算に余裕があるからと言って、一度の発注で全ての機能を盛り込むのは、失敗のリスクが高いです。フェーズを区切って、優先順位の高い機能を一次フェーズとして発注して、それを納品してもらう方が望ましいです。

なぜでしょうか。全部の機能を一括で発注すると一部機能を発注した時に比べて、システムが使えるようになるまでに長期間かかります。それによって、以下のような事が発生しがちです。

  • 開発中にビジネス上の前提が変更になり、最悪の場合、システム自体が不要になる
  • (要件定義通りに)出来上がったシステムが、実際にはビジネス上の課題を解決しない事が判明する
  • システム開発会社の技術力不足などにより、納期間際になって、システムの重要な部分が完成していない事が判明する、設計の致命的な欠陥が露呈する、など

最後のケースは、開発会社に損害賠償などを起こすことなども可能だとは思いますが、失った時間は返ってきません。

従って、重要な機能から順番に段階リリースをしていく方が、(例外はありますが)リスクが低いです。

可能な限りやるべき事

セカンドオピニオンを持つ

1社に見積もりを依頼してそこに発注するのであれば、その会社の質や相性については事前に分かっている事が前提です。

そうでない場合は、

  • 相見積もりを取る
  • コンサルタント等に見積もりの妥当性をチェックしてもらう

などの方法でセカンドオピニオンを持つ事が大切です。

なお、あるシステムのサブシステムを複数の開発会社に依頼する、所謂マルチベンダーは、発注元にある程度高度な知見が必要ですので、あまりオススメはしません。

契約形態を熟慮する

ソフトウェア開発に関する契約形態としては、XX機能○○万円、あるいは○○円/時間のどちらかが多いですが、場合によっては少しバリエーションを持たせたりした方が、発注側・受注側どちらにとってもメリットとなるケースがあります。

詳しくは、以下のエントリーで解説していますので、ご参照下さい。

ソフトウェア開発に関する契約形態 – もばらぶん

まとめ

ソフトウェア開発の失敗というのは、割と決まったパターンの事が多いので、それらを避けるだけで成功の確率はぐっと上がります。今回は、ソフトウェア開発を外注する側がどうやったら失敗を避ける事が出来るか、について説明しました。

これを読んだ方のソフトウェア開発プロジェクト成功の一助となれば幸いです。

弊社に対して、

  • ソフトウェア開発のご依頼
  • ソフトウェア開発外注に関するご相談、セカンドオピニオンのご依頼

などがございましたら、以下のお問い合わせフォームよりお気軽にご連絡下さい。

お問い合わせ – もばらぶん