I often have trouble explaining what I do to someone outside of IT, especially for the first time. Don’t get me wrong, I’m not embarrassed to be a Software Developer (certainly not a Software Engineer, but that’s another topic for another time), but more getting across all the nuances of what I do across. Anyone who’s worked in say databases or devops knows what I mean, just saying you work in IT is much easier than explaining what is it you do.
One analogy I’ve used in the past is a kitchen in a restaurant. Most people have some idea of how a restaurant works, even if they haven’t worked at one. There’s a difference between a small mom-and-pop operation and a michelin star restaurant though, from the food itself right down to where the ingredients come from. The supply chain and the processes involved in turning the raw ingredients into an amazing dish are quite different. The interesting part is how far you can really stretch the analogy, and get across the nuances of your workplace 😉 An interesting exercise is to compare what you do to the appropriate area of the restaurant.
Imagine a restaurant where customers walk in, and they tell the waiter what they’d like to eat. Most of the time they’re familiar with the menu, and they want the same thing, but with a little twist. “Can I have this but vegetarian?” “Can I have truffles on the side?” “Can I have the pecan pie, but no nuts?”
Now the customer has no idea how hard their request actually is. They think they have an idea of how hard it is, but without actually having worked in a kitchen, they haven’t got a clue. Of course they might have been chefs before, or formed their estimate based on visits to other restaurants, but that’s kind of irrelevant because it’s now the responsibility of the waiter.
Most of the time the waiter says “sure we can do that”, sometimes he says “that is impossible Madam”, but it’s really up to how well he understands what’s being asked. Often he has other agendas. Maybe he would like to please a really important customer, sometimes he is wildly optimistic about what his kitchen can produce. Whatever the case, he converts a customer request, into a slip for the kitchen.
Every kitchen is different. I work in a small kitchen where I have to share my tools, ingredients and space with other cooks. Everyone chips in for a dish, someone does the chopping, someone does the tasting and someone does the frying. Mostly. Some kitchens cook without tasting. Some kitchens have only one cook. Some kitchens have the best tools. Some kitchens have the best cooks. Sometimes the best cooks are overwhelmed and overworked. Sometimes the cooks are from the pizzeria across the road.
The slip arrives at the kitchen and everyone scrambles. In many software kitchens, particularly the small ones, everyone is pretty good at making the dish, but no one wants to know how to put the dish together. It’s often seen as “not interesting” or “not as glamorous” as doing the actual cooking. Consequently, the dish assembly is usually thrown together in a rather haphazard manner. Sometimes it’s so bad the waiter simply rejects it outright.
Assuming that it’s decent enough to be served, and the waiter has written the slip correctly (certainly not taken for granted in many places!), you eventually receive your dish. Sometimes when you see it on the plate it looks delicious, but you bite into it and you find an eggshell or bits of plastic (remember the haphazard assembly?). Sometimes it tastes fantastic but when you arrive home, you spend the next week camped out in front of the toilet.
You might think there are food inspectors that go around restaurants, making sure something like this doesn’t happen, or that offenders get punished and blacklisted…. but there are areas where the analogy becomes a little more absurd. That, and how developers aren’t really cooks in the next instalment…