Design principles

The following design principles constitute a set of general rules that, when followed, will enable you to produce a high-quality experience for your users.

Give your application a clear focus

Clear, tightly defined goals are the key to good design. Identify a conceptually coherent set of functionality that you want to provide, and be careful to avoid mission creep. An application that tries to do too many disparate things will end up being complex and potentially confusing to users.

Remember: the best applications provide an elegant solution to a specific task area.

Keep user interface complexity to a minimum

Every control or piece of information that you add to your application creates additional work for users, and increases the complexity of your application — potentially making it more difficult and less pleasurable to use. Therefore, only include essential controls and information in your application interface.

When adding a new control or piece of information, always take a moment to question whether it is necessary.

Use progressive disclosure to show controls when they are needed

Showing every possible control all the time makes an application harder to use, since users have to navigate controls that are often not relevant. Instead, only show controls when they are needed. This makes applications simpler to use, even if the same amount of functionality is provided.

There are various ways to progressively disclose controls, from using different views or modes, to showing transient or floating controls when particular content items are selected.

Require as little work from the user as possible

An application that is laborious to use can become the source of irritation, so strive to make your software work for your users, not the other way around. Every time your application requires input from users, either in the form of using controls or providing information, ask yourself whether it is possible to do that work for them.

Try to avoid the need for a manual setup screen or assistant, and make it easy to go back to recently used content.

Create a clear hierarchy

People tend to “read” an interface from left to right and top to bottom. Items that are encountered first are seen to be dominant over those that come later. Use this implied hierarchy to communicate which parts of your application are most important.

Position the most important controls towards the top-left of your windows, and place dominant controls prior to other controls they affect. See the visual layout guidelines for more details.

Prioritize content

Applications typically present content, whether it is images, text, messages or more complex data. It is this content that your users will be interested in, and too many controls or user interface elements will distract from the focus of their attention.

Give content as much space as possible in your user interface, by reducing the number of controls. Don’t crowd out the primary object of interest with secondary information.

Anticipate errors

People make mistakes. Anticipating these mistakes will prevent damaging consequences, and will make your application more pleasurable and satisfying to use. The first line of defense here is to design your application so that mistakes cannot be made. Secondly, if it is possible to make a mistake, make it easy to recover.

Automatically correct potentially invalid input, and always make it possible to undo destructive operations.

Avoid interruptions

Interruptions cause frustration and annoyance, and prevent people from focusing on what they are interested in. Design your application so that it stays out of the way when it is not in use, and does not surprise when it is in use.

Use notifications with restraint, always avoid spontaneously popping up dialogs without user intent, and avoid disruptive feedback mechanisms like message dialogs.

Use configuration options sparingly

Adding options often seems like a simple design fix. However, most people will never see or use configuration options. Instead of adding options, try to make the default behaviour of your application work for as many people as possible.

Give your application an instructive name and an attractive icon

Your application’s name and icon are two of the most expressive things about it, so design them in order to communicate its function and identity. Make sure that people will understand the purpose of your application from its name. Ensure that you have a beautiful, recognizable application icon, to give your application an attractive and distinctive visual identity.

Use emotion and humor (sparingly)

Used effectively, emotion and humor can lift the experience provided by your application, and help to develop a positive relationship with your users. Be careful not to over-use these techniques, though — it is far more effective to pick a small number of moments to use emotion, rather than spraying them throughout your user interface.

Be welcoming when your application is used for the first time. Using humor when things go wrong is another effective technique.