User Choice, Customization, and Confusion
Almost every Windows application offers the user some choice in the way that it works. Whether it's a matter of adding buttons to toolbars, selecting options from a menu, or picking an entire "skin" to change the look of the application, users have grown to expect customization. In this article, I'll discuss some of the ways that you might offer customization, as well as some of the pitfalls to avoid.
The Default Choice: No Customization
Before you rush in to implement code allowing the user to customize something, think about the low-cost, low-risk alternative: don't write the code at all. Instead, design the feature the best way that you can, and then leave it that way, giving the user no control over form or function.
There's one big advantage to not allowing customization: This approach lowers support costs. If you allow the user to customize the user interface, then you must check during any support communication to see whether they're using the stock user interface or not. This leads to additional time spent doing support, and additional confusion on both sides of the conversation.
On the other hand, if you don't allow any customization, users may feel that you've left something out. Even if you don't believe the customization will add anything to the application's functionality, users may feel cheated if they can't customize toolbars in your application just like they can in other applications. On the whole, you probably won't be able to get away with a hard-nosed "no customization" stance.
Sometimes a Little is Enough
If you've decided that you must offer customization of a particular feature, the next decision is over how much to offer. Consider the common task of letting users add, remove, or rearrange buttons on a toolbar. Figure 1 shows the customization dialog box for Windows Explorer. You can add, remove, or rearrange buttons, and set a few options.
Now, you might think that would be enough control over toolbars to satisfy any user. So would I, for that matter. But apparently the Microsoft Office team disagrees with us. Figure 2 shows just a part of the customization options for a toolbar button in Microsoft Excel 2003.
In general, I urge you to stick with the simplest possible customization scheme in your own applications, for several reasons:
- Less customization means less code to write, meaning fewer bugs in your code.
- Less customization means lower support costs, because the user interface won't flop all over the place.
- Less customization means a shallower learning curve for users, who won't be faced with such a plethora of options.
Colors and Skins
Every application should allow the user to customize the colors for its display - even though only very rare applications should have any user interface to enable this customization. How is this apparent paradox resolved? The answer is that Windows offers its own facility for color customization, which is available through the Control Panel Display applet. By sticking with this uniform interface for color customization, you can keep your application's user interface looking the way that the user likes their applications to look. As a bonus, you don't have to write code: just use the colors provided by the system.
At the far end of the customization spectrum from using system colors is the increasingly-common use of "skinning" to customize applications. Some applications, such as many music players, let you change every aspect of their interface. This applies not just to the colors used, but also to the location of controls, shape used for the main window, size and position of the Windows controls such as the minimize button, and so on. Skinning lets artistic designers rearrange an application to look like anything from a block of wood to a futuristic toaster. Figure 3 shows Windows Media Player with a skin applied. If you didn't know in advance, you'd be hard-pressed to identify this as a Windows application.
Although you can buy frameworks that enable skinning for your application with little or no work on your part, I believe that you should think long and hard before doing so. On the plus side, a skinned application undoubtedly gives the user the feeling of being in complete control, and lets them make their system look "cool." But on the minus side, such applications fly in the face of all the conventions that make using Windows easier. Your application may look more futuristic when skinned, but it will be harder for most users to use. In almost every case, that's a bad tradeoff to make.