Building Software is Like Baking a Cake
Building software is a bit like baking a fancy cake from scratch, for the first time, without a recipe.
Unless you’re an experienced baker, you will not feel confident that you can bake and decorate a multi-tiered cake for an expensive wedding between a couple of impeccable taste. However, software developers try to do just that, regularly. We sit down in front of our computer, and write up a specification for how our product will work when all of its icing-covered tiers are formed. In other words, we make up a recipe without having baked before.
We attempt to follow that recipe to the letter, though we haven’t actually built this exact product before writing the specification. What happens?
The software team implements The Big Feature you’ve been dreaming of – the one that is differentiates you from everyone else in your market. You’re as excited as a bride on her wedding day, as the bakery delivers the boxed-up cake, a differentiating feature for her wedding.
Unboxed, however, The Big Feature isn’t what you thought. It’s not going to convince users to use your product. It’s not going to wow everyone.
Let’s imagine another example to really understand how building software is like baking a cake.
One bright Saturday morning, the brass bell attached to the entrance of Kima’s Bakery sounds, and a handsome young couple step through the door. As they walk toward the counter, beaming, they barely take their eyes off each other to watch where they’re going.
Kima has seen this a thousand times before. They’re going to need wedding cake.
“We would like a 5-tier wedding cake, french vanilla with a hint of carmel, with pearls and a lavender color that matches this.” The bride-to-be thrusts forward a bolt of cloth.
Hmm. A recipe Kima hasn’t baked before. I don’t know about you, but what I heard was “a large and unique custom software project”. Did you hear that, too?
“Okay! That cake is going to take some back and forth between us, miss. If we try to deliver a cake based on what you just told me on your wedding day, we’re likely to disappoint you. I know you want it to be perfect. Can you come back tomorrow to see our work on the icing color?”
Kima takes the bolt of cloth to the back of the bakery, where Jimmy and Bunk are working. They begin mixing food coloring into small bowls of icing, encouraging each other, going back and forth until the think they have it. Of course, brides-to-be have the right to change their mind.
“That looks exactly like the color of the fabric! Um, but, could you guys make it a bit lighter? It just seem so dark.”
This happens in every software project in which I have been involved. It’s normal! We are human, and as creative, imaginative, and vast as our minds can be, we can’t always know what works before seeing it action.
It seems natural to think of a software product as a building, and building software is often compared to constructing a house. Buildings are planned down to the tiniest of details before ground is broken. Blueprints are created. Materials and equipment are purchased far ahead of time. Software products aren’t buildings, though.
Software is cake – highly customized, specially flavored cake. To get it right, you need people collaborating frequently, prepared to make changes.
And at the risk of stretching the metaphor, I also recommend you start with a cupcake.