システムの要件定義では、次の3つについて、ユーザーとベンダで議論を重ねることが肝要と言われている。
・業務要件:対象業務のフローや入出力
・機能要件:システムが持つべき機能
・非機能要件:システムの速度や容量、使い勝手やセキュリティなど
業務要件を定義するには、対象となる業務の処理や流れをコンピュータなしで定義する必要がある。コンピュータありきで業務を考えると、人が行なった方が効率的な作業をシステム化してしまい、業務の支障になることもある。
機能要件の漏れや誤解は、紛争の火種になることもある。ユーザーとベンダが一緒にチェックリストを作って話し合い、1項目決めるたびに、システム化の目的やそれまでに決めた業務要件定義と見比べ検証しながら進めていくと良い。通常この話し合いは、プロジェクトの中で最も重要な会議になる。
非機能要件としては、反応速度やデータ容量などの性能要件、使い勝手などの操作性、対ウィルス攻撃や対震災などの安全性を決めなければならない。性能要件の不備は、高価なハードウェアを無駄にしてしまう危険性がある。