Software design is akin to the chef building a great recipe, not the cook following the recipe. Many of us are so used to cooking from recipes, that sometimes we forget what goes into creating the recipe in the first place.
In software design, we are creating the recipe, not cooking from it. We prepare different combinations of ingredients (prototypes) and call friends (testers) over to try them and give their opinions. When we're done, what we've produced is the Recipe (Requirements Document). Then it's the users that cook from the recipe. What chefs don't do is write down the first ingredients they plan to use and then put those ingredients into their cookbook without any taste tests, so why do we?