Monday, 1 September 2008

I'm reading Joel Spolsky's User Interface Design for Programmers. A thought that's struck me is about architecture. It's easy to get fooled into thinking building software is a bit like being the architect for a building. I'm not even going to go into the differences between engineering practices à la building design and good practice software design. I'm going to start from the easy point, the stuff you can see.

And you can look at buildings like the Woolworth Building, and think, "I want my software to be the equivalent of the Cathedral of Commerce".

But for all its Gothic detailing, its flying buttresses and gargoyles, you can still find the entrance. You can still find your way to the elevator and up to the floor you desire. The magnificent detail does not obscure the use of the building.

The same cannot be said of user interface design. You don't simply wander past / through an impressive facade, whatever you think the "skip" button on your flash intro is supposed to do. The decoration, the clutter, is right there in front of the user, the whole time they're trying to DO something.

Do architects design their entrances flush with the walls and the same colour?
Are entrances to basilicas hidden behind flying buttresses?

No (generally). Because the design of a building is supposed to enhance the "user"'s experience, not get in the way of it.

If you're playing with acres of land there's a lot of detail you can fit in that won't hinder the ordinary person. In fact, rather sadly, many of them won't even notice it. If, however, you're coding for 800x600, or even if you're coding for a wide-screen Mega Television of Doom, there's limited space available. You want to make sure the "nice-to-haves" don't get in the way of the user's "must-dos". You want to make sure your entrances (buttons, links etc) are well marked.