In engineering, a requirement is a condition that must be satisfied for the output of a work effort to be acceptable.
It is an explicit, objective, clear and often quantitative description of a condition to be satisfied by a material, design, product, or service.
Requirement is a relatively broad concept that can describe any necessary or desired function, attribute, capability, characteristic, or quality of a system for it to have value and utility to a customer, organization, user, or other stakeholder.
Requirements are typically classified into types produced at different stages in a development progression, with the taxonomy depending on the overall model being used.
To continue the example, a requirement selecting a web service interface is different from a constraint limiting design alternatives to methods compatible with a Single Sign-On architecture.
If this is not the case, another verification method should be used instead (e.g. analysis, demonstration, inspection, or review of design).
Avionics software with its complicated safety requirements must follow the DO-178B development process.
Ambiguities, incompleteness, and inconsistencies that can be resolved in the requirements phase typically cost orders of magnitude less to correct than when these same issues are found in later stages of product development.
There is an engineering trade off to consider between requirements which are too vague, and those which are so detailed that they Agile approaches evolved as a way of overcoming these problems, by baselining requirements at a high-level, and elaborating detail on a just-in-time or last responsible moment basis.
This is partly due to the complexity of computer software and the fact that users don't know what they want before they see it.
Instead, extreme programming for example describes requirements informally using user stories (short summaries fitting on an index card explaining one aspect of what the system should do), and considers it the developer's duty to directly ask the customer for clarification.
Agile methodologies attempt to capture requirements in a series of automated acceptance tests.
It is easy for requirement changes to occur faster than developers are able to produce work, and the effort to go backwards as a result.
(For example, the stated standards of IEEE, vice IIBA or U.S. DoD approaches).