要件定義は、システム開発の全工程において「最も失敗が許されない重要なフェーズ」と言われています。なぜなら、後から「やっぱりこの機能も欲しかった」「ここはこういう動きをすると思っていた」という変更(手戻り)が発生すると、設計のやり直しやプログラムの書き直しが必要になり、開発期間の延長やコストの大幅な増加につながるからです。そのため、要件定義では、システムの利用者であるユーザー部門の意見を徹底的にヒアリングし、業務の流れ(業務フロー)を可視化することが求められます。
要件定義は大きく「機能要件」と「非機能要件」の2つに分類して整理されます。「機能要件」とは、システムが「何をできるか」(例:商品をカートに入れる機能、売上をグラフ化する機能など)を指します。一方、「非機能要件」とは、システムが「どのような品質・性能を備えているか」を指し、処理スピード(レスポンスタイム)、同時にアクセスできる人数、24時間365日止まらずに動く可用性、セキュリティの強度などが含まれます。ユーザーは機能要件ばかりに目を向けがちですが、システムエンジニアの視点で非機能要件もしっかりと定義しておくことが、システムトラブルを防ぐために不可欠です。