(Custom look and feel considered harmful)
Suppose you’re playing piccolo in a marching band. You want to play the Stars and Stripes Forever because it really shows off your skills as a piccolo player. However the rest of the band is playing the Star Spangled Banner. The talented piccolo player plays the Star Spangled Banner like everyone else. The pointless prima donna plays Stars and Stripes Forever. It sounds awful and everyone stops listening to the band.
User interfaces are no different. Some are advocating that we each choose our own tune, and indeed designing libraries to help us do that. However this serves only the egos of the players (or programmers). It does nothing for the audience (or end users) except make them walk away in disgust. I reiterate: it is the goal of a Java application (or any other application for that matter) to fit in with other applications, not to stand out.
Consistency is a virtue in user interface design. It doesn’t matter if the user interface of an application is best considered in isolation. It matters if it works the same way as every other application on the system. Users should not have to learn a new user interface for every application. We’ve tried that before (remember DOS?) and it doesn’t work. A large and mostly unrecognized reason why the Mac is still easier to use than Windows is that Mac developers mostly know this, and other developers mostly don’t.
This is why Mac users are far more likely than non-Mac users to install and try new applications. They have a much greater expectation that the applications do not have a huge learning curve. A person can only hold so many user interfaces in their head at once. It doesn’t matter that your design is 20% better than the Mac standard design. The mere fact that it is different makes it harder to use. This is why Mac users on average use several more applications daily than Windows users do.*
Custom look-and-feels are like playing the wrong tune because you want a different tune. Changing the UI for Mac OS X is like changing the tune for the whole band. The conductor decides what tune the band plays, and if he chooses wisely the band sounds better. If he doesn’t they sound worse. Either way, though, they’ll sound much better if they play what he has chosen than what each individually wants to play.
Most of us are piccolo players, not conductors. It is our job and our responsibility to play the tune the conductor sets on the instrument we have chosen. It is not our job to change the tune, and when we do that ugliness (in music or user interface) is the expected and natural result. It doesn’t matter that Steve occasionally changes the tune we’re playing. That’s his prerogative as conductor. When he does that, we change our tune too. But we should not change to a new tune we happen to like while the rest of the band is still playing the old one.
P.S. The listener is of course always free to listen to a different band. If the end user wants to change the user interface, that’s acceptable. However we as application developers should not presume to know what’s best and change the standard interface for them.
P.P.S. If you’re playing in Bill’s band, of course you should follow his tune instead of Steve’s. It doesn’t matter a great deal. Whatever Steve is playing today, Bill will likely be playing tomorrow.
P.P.P.S. If you’re playing in Linus’ band, play whatever you feel like. No one else is playing the same tune anyway.
* This certainly used to be true. However I haven’t seen recent figures on this characteristic. Possibly the gap has closed a little in recent years, though I very much doubt if Windows has caught up. There are still too many egocentric, idiosyncratic user interfaces in the Windows space.