Der schwierigste Teil beim Aufbau eines Softwaresystems besteht darin, genau zu entscheiden, was gebaut werden soll. Die wichtigste Funktion, die Softwareentwickler für ihre Kunden erledigen, ist die iterative Extraktion und Verfeinerung der Produktanforderungen. Denn die Wahrheit ist, dass die Kunden nicht wissen, was sie wollen. Sie wissen in der Regel nicht, welche Fragen beantwortet werden müssen, und sie haben sich das zu spezifizierende Problem fast nie im Detail vorgestellt.