Blame hig/C/design-principles.page

Packit 1470ea
Packit 1470ea
      type="topic"
Packit 1470ea
      id="design-principles">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Allan Day</name>
Packit 1470ea
      <email>aday@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
Packit 1470ea
    <desc>General design guidelines and advice.</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>Design principles</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea
<section id="focus">
Packit 1470ea
<title>Give your application a clear focus</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="complexity">
Packit 1470ea
<title>Keep user interface complexity to a minimum</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="progressive-disclosure">
Packit 1470ea
<title>Use progressive disclosure to show controls when they are needed</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="work">
Packit 1470ea
<title>Require as little work from the user as possible</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="hierarchy">
Packit 1470ea
<title>Create a clear hierarchy</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="content">
Packit 1470ea
<title>Prioritize content</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="errors">
Packit 1470ea
<title>Anticipate errors</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="interruptions">
Packit 1470ea
<title>Avoid interruptions</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

Use <link xref="notifications">notifications</link> with restraint, always avoid spontaneously popping up dialogs without user intent, and avoid disruptive feedback mechanisms like message dialogs.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="search">
Packit 1470ea
<title>Provide quick and effective search</title>
Packit 1470ea
Packit 1470ea

<link xref="search">Search</link> is a powerful mechanism that can be used to quickly find content. Provide it whenever you present large amounts of content, whether in the form of lists or grids. When you provide a search function, it is vital that it is as immediate as possible, and that it returns the results that are sought by your users.

Packit 1470ea
Packit 1470ea

GNOME 3 also provides an integrated search facility. Integrating application search into this gives people a quick and easy way to access the content provided by your application.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="options">
Packit 1470ea
<title>Use configuration options sparingly</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="name-and-icon">
Packit 1470ea
<title>Give your application an instructive name and an attractive icon</title>
Packit 1470ea
Packit 1470ea

Your application’s <link xref="application-basics#application-names">name</link> and <link xref="icons-and-artwork#application-icons">icon</link> 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.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="emotion">
Packit 1470ea
<title>Use emotion and humor (sparingly)</title>
Packit 1470ea
Packit 1470ea

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.

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
</page>