システム開発の失敗例・原因・防止策を調べよう!
ITシステムは現在、事業活動において重要であり不可欠な部分となっています。しかし、システム開発は思ったほど安易ではありません。常にシステムに投資している大企業は、経験や人材が豊富であるかもしれませんが、辛い経験をした企業も多いのではないでしょうか。このブログでは、よくあるシステム開発の問題点とその対策方を紹介します。
目次
システム開発の失敗とは?
定義
「システム開発の失敗」というのは一概には定義できないものです。
もし失敗を定義するならば、システム開発は「成果物の完成」を目指すため、「成果物を期限までに完成させられないこと」と失敗となります。以下の問題が発生した場合、プロジェクトはほぼ間違いなく失敗することになります。
- 休日出勤を前提にした開発スケジュールを立てましたが、完成予定が立っていません。
- 開発チームに空きがあり、エンジニアが足りていません。
- 資金的な制約のため、必要な機能をシステムに実装できません。
また、成果物が完成しているにも関わらず、「システム開発の失敗」が発生するケースもあります。これは、開発者がお客様の考えを知らずに要件を固めてしまい、お客様の意図をまったく汲み取れない成果物になってしまった場合に起こります。
システム開発におけるリスクを知っておこう
システム開発におけるリスクには、一般的に「認知リスク」「財務リスク」「技術リスク」という3つ分類されます。
- 認知的リスク :コミュニケーションギャップによる「誤解」の可能性は、システム開発において大きな障害となります。
- 財務リスク:開発費の計算は、システム開発で最も困難なことの一つです。システム開発とは「全く新しいものを開発すること」であるため、そのコストを正確に見積もることは難しいです。
- 技術リスク:企画段階では設計できそうなシステムでも、技術的に実現が困難な場合があります。新しい技術を使ったシステムでも、お客様から「動かない」と報告されるケースも多いです。
システム開発が失敗する原因と対策方法
チーム内のコミュニケーション不足
コミュニケーション は、プロジェクトが進行する上で最も重要な要素です。国内外を問わず、「伝えたいことを正しく伝える」という相互の努力が必要であり、正しい情報が正しく伝わらなければ、間違った理解のまま開発が進んでしまい、その結果、成果物が仕様と大きく異なるものになってしまったり、何度も修正を繰り返さなければならないリスクが生じます。これは危険な状況です。
悪循環を避けるために、チーム内のコミュニケーションの問題を事前に把握し、開発中も定期的な進捗管理でお互いのプロジェクトの進捗状況を評価し合うと良いでしょう。
不十分な要件定義
プロジェクトのニーズが明確であればあるほど、日程やコストが初期計画通りに達成される確率は高くなります。逆に、要件定義が不十分な場合、プロジェクト中に大幅な仕様変更が発生し、プロジェクトの失敗につながる可能性が高くなりす。
要件定義が不十分な場合、開発者側がお客様の要望をそのまま受け入れて開発してしまいがちです。開発者側は、「なぜその機能が必要なのか」という観点から要望を検証し、要件を洗い出すことが開発成功への近道となります。
また、お客様は、開発者に徹底的なチェックを任せておいて、それを無視するようなこともさけるべきです。なぜその機能が必要なのかを明確にするなど、不一致を避けるためにできることはあるはずです。
要件定義は、課題や要求を理解し、システムの中身を具体化するための重要な段階です。頻繁な要件の追加や修正、プロジェクトの後期における手戻りを避けるためには、お客様と開発者がよくコミュニケーションをとることが必要です。
不十分な作業工数の見積もり情報
作業工数の見積もりには、重大な責任が伴います。予算、納期、品質など、プロジェクト関わるあらゆる特別項目は、見積もりの情報を基づいてプロジェクトは進行でいきます。
見積もりの失敗は、プロジェクトの失敗に直結します。見積もり失敗の原因としては、前述のニーズを十分に把握せずに、現在手に入れられる情報に基づいて作業量を見積もるケースが多いです。また、工数は開発メンバーの才能や作業量に依存するため、工数を算出する前に、メンバーのスキルに関する情報を収集します。
業務内容をよく理解せず、勘と経験で工数見積もり
見積もりを出す際に、クライアントが最終的な成果物のイメージを明確に持っていないことがよくあります。正確に描かれていないプロジェクトに対して、勘や経験に基づいて見積もりを出すことはリスクが高くなります。
特に経験の浅いエンジニアは、このようなミスを犯しやすいです。したがって、熟練したプロフェッショナルは、クライアントの要望や要件を理解するためのヒアリングを行い、クライアントのビジネスを理解するための検討期間を設けることで、見積もりの精度を向上させる必要があります。
テストに失敗する
日本人は、システムに問題があったとき、そのシステムを設計した人のせいにしたがります。そのため、テスト工程を省略したり、チェックすべき箇所をすべて検査しないままテストが終了したり、不具合を見落としたりすることがあります。
テスト条件やテスト観点を曖昧にせず、出力すべき項目全て出力され、合格ラインに達するまで、テストケースを徹底的に見直し、確認すべき内容、作業手順、期待値を明確にしましょう。
迅速な対応が可能な体制を構築できていない
開発要件の枠組みをしっかりとと構築したにもかかわらず、突然の仕様変更によって失敗した経験はないだろうか。仕様変更が頻繁に発生することが予想される場合は、最初からそれを想定して、対応しやすいシステムを設計・構成することが重要です。
指示通りに開発するのではなく、要件定義から設計・開発まで独立して進められるよう、常に協力を意識することが重要です。
システム開発における失敗例
システム開発の失敗例として、次のような状況を考えてみましょう。お客様は、納品物に対して大幅な調整を余儀なくされました。予定通りシステムを受け取ったお客様から、操作不能であるとの報告がありました。
この場合、システムを「再構築」しなければならなくなります。その結果、納期通りに完成していたとしても、システムの性能が不十分であるとのクレームが発生し、工数が増える可能性があります。このような状況の問題点は「品質管理不足」に分類されますが、もう少し掘り下げると、プロジェクト失敗の原因は2つに分類されます。
- 注文する側:成長の知識不足と非効率的なコミュニケーションが問題となります。
システム開発を依頼する場合、発注者が「システム開発のノウハウが乏しい」ということが多いです。
- 開発者:クライアントの希望を確認せずにシステムを作成します。
お客様の考えは、「説明通りのシステムを実装せよ」という単純な命令ではなく、「それを叶え要望を実現してほしい」という願いです。つまり、お客様は、説明通りの機能を求めているのではなく、開発者が経験不足を補うためにより使いやすい解決法を提案し、実装ほしいと思っています。
このような場合、開発側は「クライアントがコンテンツのアイデアを出す」「決定権はクライアントにある」など、自分たちが関与できない部分があることを意識する必要があります。その上で、「何をすべきか」を事前に伝え、納期を見積もることが重要です。
システム開発を成功させるためには
成功率が80%でも90%でも、100%でない限り、プロジェクト予算と人々の努力がが無駄になることに変わりはない。
システム開発の失敗するケースの多くは、発注側と開発側のコミュニケーションが不十分であるために起こっています。これを改善するための第一歩は、意図的にコミュニケーション量を増やすことです。相手が話していることを「理解したつもりでいても、自分の言葉でまとめてから相手と対話し、理解のズレがないか確認することが重要です。こうしたことに気を配りながら、積極的に双方コミュニケーションを取ることで、システム開発の成功率を高めることは容易です。
ポイントが多すぎて不安な方もいらっしゃるかと思います。そんな方は、実際に仕事をする中で安心して任せられるCMC Japanを紹介しています。30年の開発ノウハウと2,500名以上のITプロフェッショナルを擁するベトナム第2位の民間ICT企業です。ご興味がございましたら、お気軽にお問い合わせください。