Agile Software Development Is Like Cooking a New Dish Together With the Customer
But one theme I have to comment. The authors are trying to depict the difference between software development and production process using a comparison to the processes of creating a recipe (in case of software development) and creating a dish, based on this recipe (in case of a production process). The quality of creating a recipe is defined as the ability to change and in case if creating a dish the ability to follow the recipe. Variable results in case of recipe are good and in case of dish are bad. Finally iterations generate value in case of recipe (learning process) and waste in case of dish (rework).
In my opinion the process of software development in agile way is even more complex as creating a recipe. When you are creating a recipe you are the chef cook alone with your way of thinking about "good dish". Your taste is individual and the ingredients and kitchen equipment are based on your experience and preferences. But the future customer of your restaurant is not involved in the process of creating of your new recipe.
So creating a recipe is like creating a software framework, language, library etc. but has not much to do with the creating of real business software where the customer has to be involved into whole process to get reasonable results.
So what is actually software development in that "cooking" context?
I would say it is like cooking a new dish together with the customer based on well-known recipes using your and customer's experience, your ingredients and customer's kitchen.
Well-known recipes are software frameworks and other stuff you don't what to develop from scratch. Your ingredients are software artifacts collected by you to achieve a high conceptual integrity (see my post about quality and scope reduction) thus high internal quality. Customer's kitchen is simple customer's environment you have to take into consideration while cooking.
At the beginning the customer defines the requirements of the "cooking project" in case of specifying at the beginning something like this "I'd like to eat a fish soup". You can then decide, during the cooking iterations and based on experience you have collected, if the soup is ok or maybe it needs some salt or maybe you have to throw it completely away and start the process again. And the successful end is simply defined by the satisfied customer, saying "mmmhh, delicious".
You have simply cooked something new together. Agile.