From Effective UI:
The point of software isn’t necessarily to engross your users in the experience of using the software, it is to keep them focused on the ultimate goals they’re trying to accomplish in using the software, rather than on the actual use of the software itself. […] To be truly and unobtrusively useful, software must clear the straightest, most frictionless path to the accomplishment of the user’s goals.
Effective UI is a very good book, one of the few instances where a discussion of UI (or UX, “user experience”) doesn’t drive me up a wall. This is not because I don’t care about UX, but rather because I care about very strongly. Utility software that does not “get out of my way” is no good. Productivity software that does not make easy things easy and hard things possible is no good. I make an exception for GIMP over Photoshop because it’s free, but I prefer my old-but-registered copy of Acorn (or even Preview) whenever my task is simple enough. The fact that other developers don’t make UX as high a priority as I do drives me crazy sometimes.
Both of Belkadan Software’s current products have been designed to “get out of your way” as much as possible. Webmailer has two pieces of UI: a preference pane calmly sitting in System Preferences, and a window for choosing a destination other than your default, which only appears if you ask for it. Even the “update available” notification slides in as a bar at the top of the preference pane, rather than presenting a dialog.
Keystone, likewise, tries to make a minimal intrusion into Safari’s location bar and preferences. Its completions only appear when the user types something that looks like a query. The autodiscovery UI tries to act as much like the normal “add bookmark” sheet as possible. And while it uses the traditional dialog for “update available” notifications, it takes advantage of Sparkle’s ability to delay such notifications until the second time you run Safari with Keystone installed, in order to make a better impression and reduce friction on the first run.
What I’ve come to decide, however, is that the different priorities are at least partially correlated with the primary platform you develop for.
Mac OS X (and iOS) programmers, including Apple, place user experience first. If there’s a choice between “better for the user” and “better for the program”, the user usually wins, and something that feels half-baked is better off unreleased.
Unix/Linux/BSD programmers place composability and configurability first. Your program should do one thing very well, and make it easy to take input and output from other programs; after all, the package manager has a program or library for everything.
Windows programmers place features first. The program should be able to handle all use cases – after all, someday someone’s going to want to rotate an image through an angle that’s not a multiple of 90°. And besides, it gives you a leg up on the competition. (This is the most nebulous since I actually know very few Windows programmers.)
Android seems to be a funny mix of all three of the other platforms’ priorities – but usually not in the same program.
These are, of course, generalizations, and I’ve known developers for all these platforms that break the stereotypes I’m laying down here. But I think it may be more important how the customer ecosystem for each platform affects its priorities in a feedback loop. Pro Mac users tend to value user experience, pro Windows users (and many enterprise organizations) place value on features, and pro Unix users usually have uniquely-configured systems tweaked towards optimality. Is it any surprise, then, that experienced developers on each platform try to play towards their target consumer base?
In any case, it is important to see that all three platforms’ criteria are valuable. “Bad UX”, “proprietary formats”, “no customization”, and “missing features” are all reasons why I’ve given up on various apps throughout the years. So I’m always on the lookout for suggestions on how to improve my programs.
What are your priorities?