Самая сложная часть создания программной системы — решить, какую именно задачу построить. Самая важная функция, которую разработчики программного обеспечения выполняют для своих клиентов, — итеративное извлечение и уточнение требований к продукту. По правде говоря, клиенты не знают, чего они хотят. Обычно они не знают, на какие вопросы нужно ответить, и почти никогда не задумывались о проблеме в деталях, которые должны быть указаны.