システム開発の失敗の主な原因を解説
今回は、システム開発プロジェクトが残念ながら失敗に終わってしまう原因について、解説します。システム開発プロジェクトが失敗する要因の多くは、どのプロジェクトでも何となく共通しているといった特徴があります。
この記事では、システム開発の失敗から学び、将来のプロジェクトに生かすための教訓とベストプラクティスに焦点を当てながら解説していきます。
システム開発の失敗とは
システム開発の失敗とは、システムの開発や運用において、期待した結果が得られなかったり、想定外の不具合が発生したりすることをこの記事の中では”システム開発の失敗”と定義しています。
システム開発の失敗には、以下のようなものが挙げられます。
失敗するシステム開発の原因① 不明確な要件定義
システム開発を実行するにあたって、システムを開発する目的や細かく具体的に定義することが最も重要なポイントとなります。
この作業は、”要件定義”と呼ばれるシステム開発プロジェクトにおけるひとつの工程になるのですが、失敗している多くのシステム開発プロジェクトでは、この要件定義が軽視され、またはシステムや事業への理解度が不足しているなどの理由で、最後まで詰められずシステム開発の目的や開発すべきシステムの仕様が曖昧なまま設計工程へと進んでしまったというケースが散見されます。
結果、システムの設計や実装の工程で何度も何度も繰り返しやり直しが発生し、いつまで経っても設計や開発すべき内容がまとまらず、いつまで経っても開発が終わらない“終わらない炎上プロジェクト”になります。
失敗しないシステム開発プロジェクトにする為には、ステークホルダーとの継続的なコミュニケーションを確保した上で、細かな要望のヒアリングと実現したい要件をしっかりヒアリングし把握した上で、開発プロセスのできるだけ初期の段階で明確で具体的な要件を定義することが重要です。
失敗するシステム開発の原因② スコープの拡大
システム開発プロジェクトをスタートさせ、設計や開発を進めていく工程の中で、新しい要望がでてきては次々をその要望を実現しようと動いてしまうことがありますが、これは失敗するシステム開発プロジェクトの最も代表的な要因のひとつです。
開発の手法のひとつとして、アジャイル開発といった開発手法がある為か、この開発手法を誤認し、システム開発プロジェクトの途中でも進捗のモニタリングやスケジュール、予算などを確認することなく次々と要望の実現を要求し、開発プロジェクト自体を破綻させてしまう行為はシステム開発プロジェクトを失敗させない為にも控えるべきでしょう。
また、システム開発をベンダーに発注する場合、請負契約を良く理解しないまま、システム開発プロジェクトスタート後にスコープの拡大を要求するケースもシステム開発プロジェクトの失敗させる要因として挙げられます。
請負契約とは
請負契約とは、業務を外部に委託する際の契約形態のひとつで、請負契約の受託者が仕事の完成を約束し、注文者がその対価として報酬を支払うことを約束する契約です。
「発注する際に、委託する業務の範疇を決め、その範疇を完成させる」ことが請負開発の特長である為、プロジェクトの途中で発生したスコープの拡大に対する業務の請負作業は別途契約が必要になります。この点を理解せずに、請負契約の中に、プロジェクトの途中で発生した要望や要件を詰め込もうとすることで、システム開発プロジェクトが失敗するケースもあります。
システム開発プロジェクトの途中でスコープが拡大し、機能の仕様変更や追加の機能が必要になった場合は、開発プロジェクトの進捗を確認し、変更が生じた場合には、契約内容を確認した上で、拡大したスコープとスケジュールを柔軟に調整することが重要になります。
仕様バグ・要件バグ
仕様バグ(Specification Bug)や要件バグ(Requirement Bug)とは、ソフトウエア開発プロジェクトにおいて発生する仕様書の内容に矛盾や間違いがあり、仕様として成立しない問題のことです。これらのバグが発生すると、プロジェクトの進行や品質に重大な影響を与える可能性があり、システム開発を失敗させない為にも常に注意しておく必要があります。
以下に、仕様バグと要件バグについての問題と注意点をいくつか挙げます。
仕様バグ(Specification Bug)
不明確な仕様
仕様が不明確で曖昧なまま仕様として開発者に伝えてしますと、開発者は正確な実装を行うことできず、本来作るべき成果物を正確に開発することができなくなります。
予め誤解が生じる可能性のあるポイントを列挙、具体的な仕様や期待値を明確に明示することで、ずれが生じないようにすることが重要になります。
変更の難しさ
仕様が確定していない段階での変更は、開発プロセスを大幅に遅延させることになります。
仕様の変更が頻繁に発生する場合は、予め変更が生じる可能性のある部分を共有しておくことで、プログラムを分けるなどの柔軟性のあるソフトウエア設計にすることなどもシステムによっては可能になるケースもありますので、変更の難しさや遅延発生の可能性が起きることを予め理解しておくことが、システム開発プロジェクトを失敗させない為の重要なポイントとなります。
要件バグ(Requirement Bug)
不足や誤解
要件が不足しているか、または誤解を招くような表現が含まれている場合、開発者は期待通りの機能を実装することができなくなります。要件には、正確性と完全性が求められますので、要件を定義する際には、機能として正確かつ完全にまとめられているかを確認する必要があります。
変更のコミュニケーション不足
要件が変更された場合、システム開発プロジェクトの段階にもよりますが、それに伴う変更が大量に発生します。
十分にコミュニケーションされていないと、開発者や関係者が不明確なまま進む可能性がありますので、万が一、スコープの拡大による要件の変更や追加が発生する可能性がある場合には、開発チームや設計チームと十分なコミュニケーションをとり、情報を正確に共有することが重要になります。
まとめ
システム開発の失敗は、企業の経営や事業活動に大きな影響を及ぼす可能性があります。そのため、システム開発の失敗を未然に防ぐための対策が重要です。
要件定義を徹底する、コミュニケーションを重視する、機能を理解する、設計を丁寧に行う、実装を慎重に行う、テストを徹底する、運用・保守体制を整えるなどの対策を講じることで、システム開発の失敗を防ぐことができるでしょう。
この記事を書いた人
株式会社APPSWINGBY マーケティング
APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。
ご支援業種
情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数
監修
株式会社APPSWINGBY
CTO 川嶋秀一
動画系スタートアップ、東証プライム R&D部門を経験した後に2019年5月に株式会社APPSWINGBY 取締役兼CTOに就任。
Webシステム開発からアプリ開発、AI、リアーキテクチャ、リファクタリングプロジェクトを担当。C,C++,C#,JavaScript,TypeScript,Go,Python,PHP,Vue.js,React,Angular,Flutter,Ember,Backboneを中心に開発。お気に入りはGo。