Recently, my wife and I took a weekend trip to Pentwater, MI. We went cross country skiing at Pentwater Pathways which is a groomed cross country trail comprised of 4 different loops. I had never cross country skiied before. I had no idea what to expect.
At the intersection of each loop (see trail info and map), there was a signpost showing directions. The signs were color coded, some showed arrows, and there were directional indicators on all 4 sides of the signpost. It was slightly confusing (ok, very confusing). After two-thirds of the easy loop, we took the wrong path at one of these signposts. Instead of skiing about a mile back to the trailhead, we went on a 2 mile detour on the “most difficult” loop on the trail. At this point it was getting dark and we had a not-so-wonderful trip back to the trailhead. The signs marking the trails could have been more clear if they only conveyed the information in one way. Instead they used colors, words arrows and the standard “you are here”-type map on each post. It was nearly impossible to tell (especially without a flashlight) where to go.
How do I relate this to programming?
User-interface design: The next time you decide to develop a user interface, don’t merely make the interface so it is possible for the user to get where they want; create an interface that allows the user to naturally go where they want without extra steps or ambiguous decision trees. Adding extra features just because they look cool or involve the newest in Web 2.0 development techniques should not be a goal. Helping the users of your software navigate and get something accomplished should be the main goal.
DRY (Don’t Repeat Yourself): I borrowed this one from Hunt and Thomas (The Pragmatic Programmer). The signs on the cross country trail were confusing because they were trying to convey the same information in multiple ways. If they had a concise way of marking the trails, it would have been much easier to navigate them. In our code, we should strive to keep concepts fully defined in one place and used consistently throughout our code.

