システム要求の複雑化
企業においては、グローバルな競争が激化し、取り巻く社会環境も厳しくなり、企業活動における変革要求が高度化しています。
かつてのシステム開発は、ITを活用した既存業務の効率化が主流でした。
つまり、かつてのシステム化要求は、既存の業務の流れは大きく変えずに、手作業でやっている部分をITに置き換えていけばよいだけで、要求定義はそれほど難しいものではありませんでした。
しかしながら、現代では業務の効率化のためのIT化は多くの企業で完了しており、求められる要求は、業務のやり方を根本から変えて競争力強化につなげるビジネスプロセス・リエンジニアリング(BPR)や、経営判断の高度化に役立つシステムなどです。
このような高度な要求に関しては、利用者である企業自身も明確な答えを持ち切れていない場合が多くあります。
要求自体が曖昧で混沌としている状態から出発して、これを解きほぐして整理して分析して明確な要求に洗練させていかなければなりません。
この要求の洗練化作業は複雑で高度なスキルが要求されます。
しかしながら、この作業をしっかりやっていかないと、システム化の要求が明確にならず、目的を満たしたシステムを構築することができません。
大規模化・複数システム間連携
最近のシステムは、より高度な技術の利用が可能となり、要求も多様化・高度化しています。
さらにシステム規模も大規模かつ複雑になる傾向があると思われます。
システムは、単独で存在するものは少なく、色々なシステムが連携し合い、複雑に影響し合っている場合が多くなっています。
大規模システム間で複雑に連携し合う場合、それぞれのシステムが異なる組織によって独立に所有され管理されるため、相互連携作用により事前に予測できない事象が多く発生します。
各業務システムにおいては単独で正常に動作していても、システム間の連携では複雑な条件やタイミングにより不整合が生じるケースが発生します。
組織において、それぞれの業務に特化した専門家は存在しますが、他部門の業務になるとよくわからない場合が多く、業務システムにおける機能においても、他部門における関係性や影響などまで考慮が及ばない場合が多く存在します。
そして、企業内だけならばまだしも、企業外の外部システムとの連携も考慮しなければならないケースも存在し、トータルシステムとしては複雑な連携を含めた相関関係を精査しなければなりません。
システム構築においては、技術的なスキル(ソフトウエアスキル・インフラスキル・セキュリティスキルなど)のみならず、システム化の目的や用途を理解するために、広範囲の業務スキルも必要となり、またプロジェクトをコントロールするためのマネジメントスキルやコミュニケーションスキルも必要となります。
社会と取り巻く環境は複雑化し、法制度や税法が変更されるとシステムもそれに対応しなければなりません。
システムの大規模化・複数システム間連携などによる複雑化・高度化が進む中で、システム開発にはより高度なスキルが求められますが、現状は充分に知識を持たない単なるプログラマレベルの低いスキルの技術者がシステム開発を主導している場合が多くあるのではないかと思われます。
システム技術者に求められるスキル
システムが高度化・複雑化・大規模化するに従って、システム技術者に求められるスキルも高度化・複雑化・広範囲化する傾向にあります。
システム技術者に求められるスキルは、主に「技術スキル」「業務スキル」「マネジメントスキル」「コミュニケーションスキル」「要件定義スキル」などがあります。
しかし、実際、開発にあたる技術者においてはスキルが不十分な場合が多く見受けられます。
※以下に主だったスキルの紹介をしますが、詳細を上げるときりが無いので一部である事をご理解下さい。
技術スキル
- ソフトウエアスキル
- プログラミングスキル:プログラミング言語を理解してコーディングするスキル
- アーキテクトスキル:プログラミングのロジックやアーキテクトを考えるスキル
- 設計スキル:基本設計・詳細設計としてまとめるスキル
- テストスキル:単体テスト・結合テスト・負荷テスト・シナリオテストなどを設計・実行するスキル
- インフラスキル
サーバー構成やネットワーク構成やバックアップ・監視などを設計構築するスキル - セキュリティスキル
- セキュリティリスクに対応するための各種スキル
業務スキル
- 担当する業務とその周辺の業務に関する一般的知識
- 対象となる顧客に特化した専門的な知識
※基幹システムに関係する場合、会計、販売管理、原価管理、経営分析等は最低限の知識を持っておくことが必要
マネジメントスキル
- プロジェクトマネジメントやチームマネジメントなどのスキル
※PM以外もプロジェクトに関わる中でプロジェクトマネジメントスキルは持っておくべき
例えは、スコープマネジメントやタイムマネジメントやコストマネジメントは、
プロジェクトメンバー人一人が意識しないと成り立たない。
コミュニケーションスキル
マネージャーやリーダーには、必須スキル。
それ以外のメンバーもプロジェクトに関わる中で最低限必要なスキル。
特にお客様とのコミュニケーションやメンバー間でのコミュニケーションはとても大切。
要件定義スキル
要件定義はお客様の課題や経営的な方針を理解した上で、ベストなソリューションを提供するために、重要な作業です。お客様から必要な要求を引き出し、曖昧な要求を整理して、優先順位を付けて、より費用対効果の高いソリューションを提案する能力が求められます。その為には、前述した「技術スキル」「業務スキル」「マネジメントスキル」「コミュニケーションスキル」に加えて要求分析&ソリューション提案&要件定義のスキルが必要です。
要件定義をミスると修正コストが大きくなる
システムにおける修正コストは、「要求定義」フェーズで修正すれば1の工数で済むものが、
「設計」フェーズに持ち越せば数倍に膨らみ、
「テスト」フェーズまで持ち越してしまえば、10倍程度まで膨らみ、
「運用」フェーズまで持ち越してしまえば、100倍まで膨らむといわれています。
しかしながら、多くのプロジェクトにおいてシステム技術者のスキル不足により、要件定義フェーズの品質管理はしっかりと行われていないのが実情だと思われます。品質コストは以下の式の通り「予防コスト」と「評価コスト」と「修正コスト」の合計のコストとなります。
「品質コスト」=「予防コスト」+「評価コスト」+「修正コスト」
「予防コスト」は失敗を予防するためのコストで、品質計画、品質改善、品質教育などです。
「評価コスト」は品質を保証するためのコストで、試験費用、検査費用などです。
「予防コスト」と「評価コスト」は、一定コストをかければ一定の効果が得られます。(計画できるコスト)
その一方、修正コストは不良の影響範囲に応じてコストがかさむ可能性があります。(拡大するコスト)
特に開発の後工程になるほど、その影響は大きくなります。
要件定義が不完全でそのまま開発を進めてしまった失敗例をご紹介します。
(失敗例)
そのプロジェクトは、要件定義が不完全のまま、お客様に後続の工程で残りの要件定義作業を行いますと約束して要件定義フェーズを終えました。そして要件定義が不完全なまま、「設計」「開発」「テスト」を行い、納品のタイミングでお客様にシステムのレビューをしていただいた際に、本来要望したシステムに全くなっていないと突き返され、開発フェーズの検収をもらえないだけではなく、要件定義フェーズのやり直しを要求されました。別メンバーが入って事態の収拾に当たろうとしましたが、「要件定義」フェーズで修正できていれば1で済んだものが、「テスト」フェーズまで持ち越してしまった為、修正の為に必要な追加コストは10倍程度まで膨らみ、あまりの修正コストの増加から、要件定義でいただいた金額を返金して、お客様と協議の上プロジェクトを撤退したという結果になりました。
当然、開発に当たった会社は開発費用の全額が損失となりました。
このように「要件定義」フェーズでの失敗は致命的になります。
しかしながら、現状は、多くのプロジェクトでスキルが不足している技術者が要件定義を行っているといった恐ろしい状況にあると考えます。
要件定義のミスは後工程では数倍から100倍の損失になる事を、プロジェクトマネージャーや要件定義者は肝に銘じなければなりません。
コメント