Requirements Engineering
There may have been roughly an equivalent amount of thought over the last few decades into how to know you're building the right software as there has been into how to build software better. The software engineering techniques of the period 1960s-1980s explained how to construct requirements specifications, how to verify that the software delivered satisfied the specifications, and how to allow discoveries made while building and testing the software to feed back into the specification.
In the 1990s, methodologies arose that favored closer interaction between the users of the software and its builders. Rapid Application Development dropped "big upfront" planning in favor of quickly iterated prototypes that customers could explore and give feedback on. Extreme Programming took this idea further and involves the customer or a representative of the customer not only in appraising the product during development but in prioritizing and planning the...