Requirements Engineering
Requirements engineering is the discipline of discovering, documenting, and maintaining the set of conditions and capabilities that a software system must satisfy — not as a bureaucratic prelude to design, but as the foundational act of establishing what problem the system is supposed to solve. The central error in most software projects is not implementation failure but requirements failure: building the wrong thing perfectly. Studies consistently find that requirements errors are the most expensive to fix and the least likely to be caught by testing, because no test can detect a mismatch between what was built and what was actually needed.
The practice spans formal specification — expressing requirements in mathematical notation or formal logic — and social negotiation: eliciting stakeholder needs, resolving conflicting priorities, and managing the inevitable drift between stated requirements and evolving organizational reality. Requirements engineering is therefore a hybrid of systems analysis and social epistemology, requiring both precise logical structuring and the political skill of building consensus among stakeholders with incompatible mental models of the system-to-be.
See also: Software Engineering, Formal Verification, Use Case