This has always been one of our favorite analogies and also happens to be the easiest way to explain programming and software development to someone who doesn’t speak the same language. It’s been highly shared, and unfortunately, we don’t know who the original author was/is, but kudos to whomever wrote this gem. Read on.

How do I explain to non-programmers how complex, time-consuming, and error-prone software development is?

Ask them to describe the steps needed to make a cup of tea, they will say something like:

  1. boil water
  2. put tea in a pot
  3. when the water is boiled pour it into the pot
  4. wait 5 mins
  5. pour the tea into cups
  6. add milk
  7. drink

Now the fun begins. You need to start asking these kinds of questions:

Boiling water?

  • where is the water coming from?
  • where is the kettle?
  • how do you get the water into the kettle?
  • how do you know how much water to put into the kettle?
  • what if there is no water/kettle/electricity?
  • what if you fill sensor fails?
  • what if your boiling sensor fails?

Put tea in pot?

  • where’s the pot, what if there isn’t one?
  • should we have thought of that before boiling the water?
  • where is the tea, which kind of tea?
  • should we have asked first, perhaps we shouldn’t have started this if we don’t have the right tea?
  • etc.. etc.. etc…

Pouring boiling water?

  • are you sure its boiling?
  • how can you make sure that the machine doing the pouring got the right ‘done’ signal from the kettle?
  • how do you make sure that the pouring machine knows where the pot is?
  • what if the pot tips over during pouring?

This can go on for hours…

They will eventually get bored and say “this level of detail is silly”,  you can sagely smile and say “exactly” this is what it is like to program software!

P.S.  After all that, tell them the customer actually wanted coffee to go with an extra shot and not a Japanese tea ceremony – surely you should have known that, wasn’t it obvious from the requirements?

Do you have questions about programming? Give us a shout we’ll walk you through all the boring questions you have yet to consider!

Get in Touch!