What is a constraint in requirements engineering, and how does it differ from a functional or a quality requirement?
A constraint is a requirement that limits the solution space beyond what is necessary for meeting the functional and quality requirements — it rules options out, rather than describing what the system does or how well it does it.
* Each requirement type shrinks the space of acceptable designs; the constraint shrinks it further than the need itself demands. *
Put the three types side by side and the distinction is clean:
- A functional requirement says what the system must do — "the user can transfer money".
- A quality requirement says how well it must do it — "the transfer confirms within two seconds".
- A constraint says and you may not solve it that way — "it must run on the existing Oracle database", "the data must stay hosted in Switzerland", "no new third-party libraries".
The definition's careful phrase is beyond what is necessary. A constraint is not derived from the need; it is imposed on top of it. A dozen designs might satisfy the functional and quality requirements equally well, and the constraint deletes most of them — for reasons that are usually organisational, legal or historical rather than technical. That makes constraints worth capturing explicitly and worth challenging explicitly: an unexamined constraint quietly costs you every option it removed.
Constraints also act one level up, on the requirements work itself. Different project constraints influence requirements engineering: people, domain factors and organisational constraints — for instance the spatial distribution or the temporal availability of project members — have a large impact on which techniques are even usable. Stakeholders spread across three time zones make a full-day joint workshop impossible, so elicitation has to shift to interviews and asynchronous document review, which changes what you are likely to discover.
Tip: Test a candidate constraint by asking "what would we do differently if this were lifted?" If the answer is "nothing", it was never a constraint — it was a preference.
Go deeper:
CPRE Glossary of Requirements Engineering Terminology (IREB) — the source of this definition, next to the terms it is defined against.