any architectural, design, or implementation decision that legitimate stakeholders have determined is mandatory
and therefore has been selected to be treated as if it were a normal requirement
The following guidelines have been found to be useful when producing constraints:
Constraints have traditionally been referred to as design
constraints, but this term is too specific because many
constraints actually constrain the architecture or the implementation.
Constraints should only be specified if really necessary.
Ordinarily, requirements engineers should avoid specifying
architecture, design, and implementation constraints.
Constraints should include a rationale because they
restrict the choice of architects, designers, and programmers.
There are numerous valid reasons for specifying constraints:
A customer organization may want to standardize on a
given architecture across multiple applications in order to
minimize maintenance costs and errors, retraining costs, and operator error.
The customer organization may already use certain
hardware components, programming languages, databases, etc.