Whilst sitting in a restaurant with Geoff Appleby today I started thinking about how the whole food preparation and service business is a really good metaphor for how software is delivered, perhaps better than the construction business.
What really makes the metaphor fit is not any one particular style of food preparation and service but the sheer number of options available to us as consumers, for example – I can think of the following types of food preparation and service approaches:
- At home, in the kitchen, cooking for yourself.
- At home, in the kitchen, having a loved one cook for you.
- At home, in the kitchen, having a private chef cook for you.
- At home, ordering takeaway for delivery.
- Out of the house, in a drive through at a fast food restaurant.
- Out of the house, in a queue at a fast food restaurant.
- Out of the house, in a real restaurant with table service.
I am sure that given more time I could come up with some more but these will do for now – lets have a look to see how they apply to software development.
At home, in the kitchen, cooking for yourself.
Doing software development like this is often very enjoyable. First you get the stimulation of cooking the code, you don’t bother with the finer points because after all you are just making this for yourself. Every now and then you get brave enough to share what you have cooked with your friends who politely take a few bites but they would rather be eating cardboard from a fast food software development house.
At home, in the kitchen, having a loved one cook for you.
Sometimes you don’t have the capacity to cook code for yourself because you don’t have the skills. The person who does the cooking for you is typically family and they end up cooking for you because they empathize with your position and without them you would end up starving or having to go out and eat at an expensive restaurant. Sometimes the results can be mixed - you might get lucky and your loved one is a professional, but the more professional they are the more chance there is that they will be short on time to get the job done and your meal will almost always arrive late or never.
At home, in the kitchen, having a private chef cook for you.
You had better be loaded – this is the expensive option. Chances are you are getting a professional to cook code for something big that you are trying to get off the ground. Usually the benefits of having someone else cook for you in this instance are greater than the cost itself – think weddings, parties and Web 2.0 start-ups.
You’ll get exactly what you want provided that what you ask for is within their repertoire, and even if it isn’t they might branch out to keep the good relationship going.
At home, ordering for delivery.
Off shoring your food. Chances are you argued for three hours wondering what you wanted your code to do but in the end you got so hungry that anyting and everyhting looked good and you ordered the “special” with a few extra sides which you didn’t really need - “but you were starving”.
You wait patiently for the food to arrive and when it does its not exactly what you ordered – but you can’t prove that because there wasn’t a common understanding of what the “speci(al)fication” really meant. In the end you decide to cut your losses and eat what you can now and put the rest in the fridge. Maybe tomorrow you will start another abortive food development project to reuse what was cooked.
Out of the house, in a drive through at a fast food restaurant.
It is a fast paced life you lead and you need to get somewhere but someone is screaming from the back wanting code so you stop off at the first place that offers a drive through to get “something”. You don’t really care what it is – you certainly aren’t interested in best of breed, you just need to tick the box and get back on the road.
Out of the house, in a queue at a fast food restaurant.
You want a good dining experience so you are taking the time to pull pull over and specify exactly what you want the code to do and you will have the opportunity to correct any mistakes in the delivery as they are made. The software cooking team has a variety of off the shelf components that they use to get the job done quickly and they deal directly with you which is nice – at most there is one degree of seperation between you and the cooking process.
The problem is that there are only a finite number of people on the team and you have to wait your turn to give them the order. The end product isn’t perfect but satisfies 70-80% of your requirements and was pretty cheap.
Out of the house, in a real restaurant with table service.
You thought you were just going out for drinks when suddenly a waiter (consultant) turned up and started offering a few side features with your beverage.
This outsourcing approach has the consultant collect up your requirements and return to the kitchen so that the “chef” can cook your code. You are assured that each of the chef’s is a regional master and your order is in the best possible hands. It all sounds innocent enough until the bill arrives and you learn how dearly you are going to pay for your scope variations.
You decide to audit the kitchen and you discover that your french master is a pimply faced apprentice chef called Bobby and the head chef is a bloke named Shirley who likes to smoke and stir ash into the “chef’s special” pasta.
By this time you’ve had too much to drink to argue and you are settling in for the long haul. At the end of the night there is a huge bill which someone ends up paying and the whole event is declared a success because anything else would be too unpopular.