programmer analogies

I've been thinking about different trends and practices in programming a lot lately, since they've been hitting me in the face at work. But instead of jumping into that I want to start off with an analogy.

What's the difference between building a truck (a big 18-wheeler),  and building a racecar? They have a lot in common. They both have very powerful engines. They both meet very exacting quality standards. They're both very complicated. But there's a different mindset that goes into each one. Let me table you:

speed and handlingnot importantvitally important
weight and aerodynamicsnot importantvery important
reliability targetmonths, yearsone race
maintenance costsmust be cheap to fixnot important
fuel efficiencyvery importantnot important*

You see a lot of trucks on the road. Building trucks is serious business for serious people. People who build trucks can be proud of what they're doing. But you'd rather drive the racecar. (Or at least a sports car.)

So, I'd like to apply the analogy to something closer to my field of interest, namely browser-based MMOs. When you're making such a beast, you have a choice. You can look at it like a web application (see: facebook, amazon, gmail...) or you can look at it like a game (see: mario, halo, starcraft).

My contention is simple: web-apps are the trucks of programming, games are the racecars.

Web AppGame
interface speed and handlingnot very important**vitally important
cpu efficiency and network latencynot importantvery important
user accessibility, availability99.99 or better95? 90?***
maintenance costsmust be cheap to fixnot important
bandwidth costsimportantnot important

I think you can take this analogy a lot further, to look at the people who work on cars and programs, to look at their tools and trends, etc..  Anyway it upsets me that we're building a racecar, but our engineering decisions seem to follow the current truck-building trends and best-practices. They're not appropriate to our business and they've put us in a world of hurt.


*This is a guess. Maybe fuel efficiency is important for racecars? I don't really know.
**web page response times of 1 second are acceptable. If you press a button in a game and don't see a response within 0.5 seconds, the game has crashed.
***World of Warcraft goes down for 6 hours every week, on Tuesday morning from 5AM to 11AM. If KFPW went down for a (scheduled!) 2.4 hours every day and was fine the rest of time, that would be just fine with me. But can you imagine if gmail did the same thing?

1 comment:

  1. Thank you for making such thoughts accessible to non-programmers. :) Even if they're very abstract, it's still really neat to get a peek into that world.