Establish concrete delivery requirements:

  1. Understand the business goals and objectives for the system: the key stakeholder needs, customer and user needs/requirements (now and in future), industry-specific and implied needs, technology needs – and developer/system constraints.

  2. Know that requirements are difficult to write and understand. Good requirements are: correct, complete, precise, consistent, unambiguous, understandable, feasible, verifiable, and prioritized.  Designers, programmers, testers, trainers, and users work from and rely on these requirements in one way or another – whether good or bad.

  3. Any error or confusion about the requirements will be compounded by those that rely on them. Customer's Subject Matter Expertsshould signoff on requirements as necessary. The economics of software has shown that it can take 50-70+ times the effort, and twice as much time to identify and fix errors & defects that could/should have been caught in earlier development, peer reviews and testing phases.

  4. Identify and develop metrics for measuring system attributes and "-ility" needs including:performance and database attributes; –ilities incl. availability, portability, testability, reliability, recoverability, maintainability, and securability. Consider eliciting requirements using JAD sessions, hands-on demos, site visits to other users, focus groups, etc.

  5. Identify technical needs from the product perspective to describe the relationship and interfaces to other products, if any (e.g., system, hardware, software, communications interfaces, maintenance and operations requirements, and site adaptation requirements).

  6. Identify Product constraints that limit the developers' choices including: regulatory policies; hardware limitations; batch processing; parallel operation; design constraints; audit, reliability, safety, security needs, and application criticality.