Much wisdom has been passed from generation to generation. Often, it is passed through word of mouth or shared experience. For those lucky enough to have grandparents who share their wealth of knowledge and experiences, what follows may seem like common sense. For the rest of us, especially those in the software industry, I am going to prove the following: the ideas of pair programming, producing software in increments, reviewing shippable software and adapting quickly to customer feedback came from making cookies.
I know it sounds absurd. Stick with me and let me explain.
An old soul friend of mine wears a vintage green cooking apron over her cream colored dress. She carries with her the grace and wisdom of baking cookies. These are not just any cookies. They are chocolate chip cookies – my personal favorite. Due to my personal interest in the output, her construction of these cookies from their raw ingredients always captivates me.
The way in which my friend makes cookies is unlike the way I make them. My process goes as follows:
First, I gather all of the requirements and specifications so I knew exactly what I am making. Basically, I grab a bag of chocolate chips from the grocery store and read the label to know what other ingredients I need. Next, I determine the number of cookies I need and add any custom modifications I desire – walnuts, wheat flour or candy pieces. Lastly, I come up with a timeline as to when I will have them all finished so I know when my friends can join me in eating them.
With the planning phase complete, I develop the batter by collecting the ingredients in one large batch that barely fit into my plastic mixing bowl. After integrating everything with an electric mixer and splattering my walls with dough pieces, I finalize development.
Raw cookie dough in hand – minus a few stolen spoonfuls for quality assurance purposes – I place spoon-sized blobs onto parchment paper lined cookie sheets and bake the entire batch for as long as the recipe tells me it will take for the cookies to be done. By “done,” I mean burned. This is what happens every time I bake cookies. Of my last three attempts to follow specific cookie-baking direction, I have yet to yield a shippable version of cookies.
My apron-wearing friend has a different approach. She mixes the dough by hand and places the portions onto buttered cookie sheets. Only one dozen cookies are put down and baked at a time. After they are pulled from her space-saving three-quarter sized oven, they are taste tested. If not already perfect, a decision must be made as to how to modify the dough to make the next batch better. At least ten of the “smaller-than-I-would-make” cookies must be devoured before my friend decides whether or not more butter or sugar is needed. Still in her apron, she melts butter, cautiously pours it over the dough and adds sugar to the mix. Her process repeats for every dozen cookies produced until they taste right. My friend knows how cookies should taste but can’t necessarily verbalize it or write it on a recipe card.
How did my friend learn to make cookies this way? Her grandmother taught her.
Making cookies this way has much in common with the way software is made in agile environments. The elements of pair programming, stakeholder reviews, short customer feedback loops, and continuous improvement have all been present in cookie making since grandmothers around the world first began baking cookies and passing along what they have learned to others. Only recently has software development incorporated the same common-sense methodology.
What have I learned? If I begin making cookies the same way I teach others to build software, my next endeavor may yield a batch I can eat.