Requirements engineering is a subfield of software and systems engineering that aims to identify problems by discovering requirements through iterative processes like elicitation, specification, analysis, verification and management. It must be a continuous and dynamic process to adapt to changing requirements given the high costs of fixing errors late in development. Tacit and contextual requirements are often uncovered through apprenticeships or risk-reduction iterations in development models like spiral development. Managing requirements is challenging due to their scope, volatility and the need for agility to adapt to a moving target.
Related topics: