I once watched a cooking challenge show in which five contestants each prepared three dishes based on a theme ingredient.One of the contes- tants burned a dish.Rather than try to salvage a lost cause,she chose to serve just the two dishes.Surprisingly, the judges rewarded her for not vio- lating a primary rule of cooking— never serve something that isn’t perfect.Software development could learn from this tenet.Sometimes it’s better to discard a first-generation
system or prototype rather than car- rying over bad decisions into the next version.Of course,it costs a lot less to throw away a meal than to scrap a major software project,but then the risk is equally unbalanced:The con- sequences of serving that slightly imperfect meal might be far less severe than serving a software prod- uct with possibly fatal flaws. So what are the lessons for soft- ware engineering? Both remark- able software and superb cooking are a mix of science and art;of repeti- tion and innovation;and of theory and intuition.From this blend comes prac- tices that aim to balance quality,scale, and time pressures.Perhaps the most essential lesson is that there are no shortcuts to success.Über-practition- ers like Bob Martin and Martin Fowler make software architecture,construc- tion,refactoring,and testing look sim- ple,but that’s because they’ve put in hours of practice and follow the same principles as master chefs: Keep the
kitchen clean,have the best tools and quality ingredients,learn and practice basic techniques, and have basic recipes,but be prepared to adapt them. Eliza Acton expressed the essence of cooking and software engineering eloquently more than a century ago: “It is not,in fact,cookery books that we need half so much as cooks really trained to a knowledge of their duties”(Modern Cookery for Private Families, Fairleigh Dickinson University Press,1845).There’s noth- ing I can add except, “On to the kitchens,and bon appétit!”