The more you learn about Windows application development, the less you know -- yet it all seems so familiar.

Friday, September 09, 2005

How a good design is like Top Spin

There's a tennis game out for the XBOX, it's called Top Spin. It's a really great game. I think a good software design should be just like Top Spin.

What? Well, let me explain...

One of the neat things about Top Spin is that I can play it with my girlfriend and she doesn't play video games. I'm pretty certain I can play it with my almost retired Mom as well. (of course she just about put me to tears when she broke my record in Cosmic Cruncher (Commodore Vic 20 version of Pac-man) when I was young)

What I'm getting at is that the game itself is easy to pick up. You run towards the ball, you hit the button and the ball goes back -- its almost Pong-like. On the other hand, if you spend some time at it, the experience is incredibly rich. You have different kinds of spins, risk shots, drop shots, lobs, you can control the distance and power, you can do jumping smashes... the list goes on.

In other words, the game is easy but has all the power and flexibility to be a full, rich Tennis game. It all depends on what you are trying to do.

To me, that is what a good software design is like. At its core, its simple and I believe it was Steve McConnell that said a software design should be so simple and obvious that you look at it and think there is no other way it should be done. Achieving that elegant simplicity is of course the most difficult thing to do.

So a good software design, at its core, should be easy to be productive within. That said, when you need to do more complex things or you need to add on, extend or change, that power and flexibility is there. It was always there but it never got in the way of the base case productivity.

I think the .Net Framework actually exemplifies this quite well whereas a technology like COM had so many things that got in the way of productivity that it practically required a class just to write and use a COM object.