Ever since I came into programming I've been observing and wondering about one particular phenomenon. It is how most programmers proactively avoid anything to do with interface design and usability questions.
I understand where it comes from. Most programmers love programming. They readily learn more languages features, try new components and libraries, improve their algorithms and code architecture or optimize their data structures. It seems to be of the foremost importance, because a program is pure function which is only as good as its code and algorithms are good and optimized. Interface components are typically regarded as some auxiliary parts which are only there to enable user input. This makes sense. Actually, it would if programs were developed for programmers.
As you can probably guess, most programs are developed for users who know nothing about programming, computers or many other types of technical things. Like it or not, you know you want them all on board.
Now we're coming close to a revelation. Hold tight, I'm going to break it to you. Users only see the program interface and nothing beyond. As far as they are concerned, there is nothing to the program except for its interface with buttons, texts and other decorative elements.
Actually, this is true. Users have no knowledge or interest in your sophisticated algorithms, data structures or your ingenious application architecture. Users only see the front end and are going to judge your software mostly by its frontend. They will be happy if the program works just as they expect, corrects for their errors and makes good suggestions. But they are going to be sad if it asks them something they do not understand or they need a feature they just can't easily locate.
If you're in luxury of being able to stay specialized in your technical domain while isolated from interface-related questions by usability team or your other colleagues who do interface, you can probably ignore the issues we discuss. If you’re a DBA you can focus on learning more and more hidden feature of your favorite database engine to make for faster queries with more optimized execution plan. If you're primarily a business domain developer, you can stay focused on modeling domain entities, transformation procedures and the customer-specified workflow. If you're a system programmer, you may wish to optimize your algorithms and improve on memory allocation and disposal patterns. You can proceed with doing whatever you’re into and continue thinking of design and usability issues as of imaginary problems than are better suited for those sociology and psychology folks who apparently cannot contribute anything else beyond deciding on the color of a button (do we make it green or blue?) and the location of elements (do we put it in the top-left or the top-right corner of the screen?). But if you're in the role that requires of you to create interfaces along with the usual programming, then you may use some good advice. Also if you feel like you're missing something and wish to widen your horizons, then read on.
Knowing that you're skeptical about all this stuff, I will stay brief. I'm going to give you a few simple ideas about most common usability problems and how to avoid them. It will give you an overview of what's going on in the users' minds and what to pay attention to when designing efficient interfaces. It's not going to be an extensive design workshop, just enough to give you something of value without making you fall asleep in the process. If you will be willing to take the issues presented here into consideration while working on interfaces, you may suddenly find your programs highly praised by your users without noticeable changes in algorithms or performance optimizations you are aware of.
Let's get then started with our talk.
1. Don't talk to users in geek language
Typical users are not techies and may simply have no idea what you are talking about. Don't throw at them a message that some DLL is missing or a COM object failed to register properly. How can that possibly help them identify and fix the problem? For most web surfers including those addicted to web space, words like JavaScript, CSS and even HTML mean nothing. They have mostly grasped the ideas of browsers, pages and the Internet somehow connecting them. "HTTP 404 error" is useless information. "A page you requested is not found" conveys a much better idea of what's going on. Whenever you need to tell a user something, think of a bottom line that most users will understand. Nobody is going to call DllRegisterServer manually to fix your problem with the missing COM object. But if you tell them that some product you’re dependent on is probably missing, they will understand that they need to pull out a disc with that software and install it.
2. Don't write long texts
Because these are going to be ignored. The longer a text is, the more chances users won't read it. Empirically something longer than a line and a half is going to be considered as a long piece of text rather than as a short message and will consequently be ignored. The reason behind is that users are impatient. Web surfers may only spend up to 5 seconds to have a first look at your page until get repelled by a wall of text. Users are only interested in getting their tasks done. The least they want right now is an educational course in computer software or anything else they will regard as completely irrelevant. Stick to a 2-3 words message for a label or description. Use other techniques to connect interface elements together like grouping them by color or separating groups by white space. Put a question mark near elements so that users can hover over it to see a longer description in case they feel they need it.
3. Forget documentation
Users don't read documentation. Seriously. Nobody does unless they have no clue whatsoever about how to use your program or any other piece of software or machinery. Design your program so that the interface concept is clean and the path to accomplish a task is evident. If the software can’t be started with right off without reading a book first, it effectively means you have failed in creating an effective design.
4. Don't overwhelm users with a multitude of elements
Don't throw at users screens with dozens of elements and controls just because you think they may equally need one of them right now. This will only result in them getting perplexed while looking through all of them trying to figure out which ones are relevant to the task they have at hand. Indentify the most needed options for the activity the screen is focused on and hide the rest behind the button "Options". Users will be less distracted and can accomplish their tasks more quickly. Simplicity is good. For those more advanced users or just curious ones there will be a bounty in the "Options" dialogue.
5. Focus a screen on one task
Design each program screen, page or a dialogue to be focused on one particular task. If there is a dialogue to upload a photo, don’t add here options to remove dust and scratches or to print a postcard. Those may be very useful later but right now the only thing a user wants is to upload this photo. When a user sees more features, they get distracted from their task at hand and go explore other options easily forgetting where they were. Keep it focused and well organized.
6. Have a clear and intuitive interface model
Nothing can irritate users as much as the feature they know is there but which they cannot find in your menus and dialogues. This adds to their irritation. Users feel they are not in control of the program. They waste their time. Like one common joke related to web design goes: "You know that your design has failed when the users have to use the browser search function (Ctrl+F) to locate the search input field on your page." It is very important to define application concept to be simple and logical and then design a navigation structure to reflect this model. Pull features together into logical groups. Provide context-relevant feature suggestions. Offer default settings with hints where to override them. Make it very easy for a user to guess where in the navigation structure they could find some feature or a setting provided it exists. Users feel happy and in control when they guess and get a hit.
7. Emphasize the important part
A screen or a page must emphasize its elements that are crucial to performing its main activity. These elements should be easily distinguishable as primary controls. Auxiliary elements have to be immediately identifiable as such. They should be easily findable on a page but at the same time clearly perceived as auxiliary. This could be achieved via weaker colors, smaller font or image size or via white space separation from main controls. When a user knows what is important and what is optional they can accomplish their task more quickly. When all screen elements are equally week or equally strong, it adds to confusion. A user must work through all of them and build a model in their mind to set main and auxiliary elements apart. It slows them down and requires extra effort to process a dialogue. One very important rule in interface design says "Don't make me think". This should be taken in consideration at all times when working on interfaces.
8. Focus on user activities not features
Users want your software because they can accomplish their tasks with it. Users think in their tasks or activities, but not in features or data structures. Sometimes developers think that user interface is just a thin wrapper for the domain model or other view of the application structure. This results in interfaces reflecting the program composition in most clean and logical way – in the eyes of developers only. Users won't normally see the beauty of logic and structure. They will be struggling to find a function they need. They will have difficulty to guess that this property can be set in some other place because it is where you can define this property for a family of elements. They will have problems seeing some function as part of some general workflow process. For non-techie users a very logical interface build around data structures and transformations can be impossible to break through. Think of yourself. How many times have you tried to find some setting in one of your everyday programs only to give up and search the web for hints where it could be located? You've probably lost the count. I definitely have. Here is the remedy though. Think of tasks and activities as seen by users. Look at all your features and arrange them by user activities. Think of the most common settings or operations a user would want to use when performing some operations. Put them in front of the users so that they are just a click away but not buried under several layers of settings and dialogues.
9. Bring the most frequently used features to the front
A very simple way to simplify and speed up the user work is to keep the features they use most often on top. Think of which ones could be most popular in one or the other scenario. Observe the users. Ask them. Let the program gather feature usage statistics. When you have this data, rework your interface. Put the most needed features on top and move the rest into helper menus and dialogues. When users have what they need at their fingertips, they feel happy as their work progresses with very little effort and with very little time spent for searching things or repeatedly performing the same steps.
10. Minimize clicks per action
One very common usability mistake that is probably too obvious to get noticed by developers is hiding interface elements into unnecessary nested menus and dialogues. You wish to change some setting, you click a button to call a dialogue where you change some value and then enter the second dialogue to tick some checkbox, after which you need to click "OK" twice to close both dialogues. You're smiling, you've seen it before so many times. Psychologically, such interface composition feels closed. Everything is obscured into closed rooms and wardrobes. Here's the suggestion. Open your interface. Get rid of both dialogues. If there are not a half-hundred settings, but just a few, pull them all together on the main dialogue. Users won’t have to click repeatedly to check or change some value or setting. They will see it immediately there and decide whether everything is okay. This feels open. This feels like you're in control, like the program is there to serve you but not to challenge your memory and attention. It's not important that there will be some more controls on the screen, if it improves user experience, it is worth it.
11. Avoid non-conventional interface behavior
One trick that effectively confuses users is using non-standard interface elements with non-conventional look and what is more serious with non-conventional behavior. Most usually this can be seen on web pages which allow for imaginative designs and where web designers find an outlet for their creativity. It often results in great designs, both beautiful and very functional. Just as sometimes creativity takes over function and usability and builds a barrier between the user and the machine. Examples are easy to find. Links that are not underlined and are of a color very close to the page text, which makes it difficult to distinguish them. Areas of screen that look simple and passive but which react to a click and open another window or invoke some action. One example is with the Flickr site. When one wants to change the title of an image, they are going to have a hard time trying to find out how. I first spent a noticeable amount of time before I erroneously clicked on the current title text. This was only a text on a page, seemingly a passive label. It however transformed into an input field upon clicking. It is not intuitive and there is no way a user can guess this behavior. These design pearls have to be avoided. When interface does not perform as most users would expect it to, the design is failed. Users get frustrated. With web sites where there is usually an abundance of alternatives for every service imaginable, users would easily go to the next place to see if they can possibly be more happy with it. Knowing this, one should take careful steps to merge creativity with usability in a way that will not harm user experience.
12. Have consistent interface
It is very important to have a consistent look&feel everywhere throughout your product. Decide on a set of styles, colors and elements and use them consistently in your interface. Decide how user input is distinguished from static texts and system messages. Decide how to make most important interface elements prominent, but auxiliary less contrast. Decide how to arrange elements on a screen to make it simple for a user to perform their task. Define interface guidelines and follow them everywhere. Don't make each separate screen a new design tryout. Don't try to impress users with colorful elements everywhere. Don't interchange colors, font sizes and elements behavior. If user input is in blue but system texts are in grey, keep in everywhere. When a user has learned and understood your design concept, they will feel easy and confident around other screens even if they haven’t seen them before. If each new screen is different, users will waste time and effort learning each one of them. Naturally, with many of them they are going to forget the previous ones. This makes for painful experience. One bad example I always felt strongly about is the interface idea of Samsung mobile phones. Their interface is obviously meant to impress users with colorful icons, texts, messages and animations while they are in a store playing with a device. Just as it may do this trick, the actual usage experience is dramatically different. Each screen is done with too many colors, which are not consistent throughout the interface. One has user input in red but system messages in green. The other one is done with orange and grey. The next one uses blue and purple. It's likely fun for children but a pain for many users especially the older ones. Having had one for a while before returning it, I felt working through the interface was making my brain hurt. You have to learn and remember the interface concept for each screen and remember it. That's completely wrong. An improvement suggestion is to limit the color palette to two-three colors and stick with them everywhere. Have everywhere the same looking menus. Have standard buttons like "OK" and "Cancel" be found in the same places, never with their positions switched. Have the same method of saving user input, don’t mix auto-saving with explicitly requiring to press a "Save" button. Consistent interface will save you time developing it and what is more important will spare users' time and efforts learning it.
13. Remove unnecessary elements
Look pragmatically at your interface and ask yourself whether all its components are absolutely needed for effective user-to-machine communication. Do icons contribute to feature recognition or are they just there for decoration? Do texts explain the ideas to the user so that they can make an advised choice, or are they simply there to small talk to the users so they do not feel bored? Do parts of pages really need to be outlined by strong contrast lines, or they are already well separated by white space or different color schema? The less unneeded and auxiliary elements are there on a screen, the simpler and more open it will look like, which in turn will convey the feeling of trust and being in control. Are all those controls really needed to be there all at once? If only a few of them are expected to be really used, then hide out the rest behind some "Advanced" dialog or collapsible section. The less distracting elements a user sees, the more easily and quickly they will be able to accomplish their task.
14. Don't ask users to make choices
In your communication with a user keep to a minimum the number of questions where the user is required to make a choice. Unless it is the point of the user activity to provide answers to predefined questions, attempt to decide for the best default option and go with it. Requiring from the user to make a choice interrupts their normal activity and causes the switch of the context. The user is forced to abandon their thought process and think about what you need of them. This feels like an intrusion. This has especially bad consequences when this happens before the first use of an application. When a user is asked to answer some tricky question when they first see the application they are very likely to do it wrong. If you think about it for a moment, in many cases it is not possible to make a meaningful choice before having used the application for a while and getting experienced with whatever the question is about. So the user either accepts the default suggestion or picks up anything that seems like a reasonable choice. The problem is that on the subconscious level they will know they didn't know the matter well enough to have made a good choice. So regardless of their choice, they are going to feel they got it wrong. They will have the feeling of something broken from the beginning of their experience with your application. And that's certainly not the sensation you wish to awaken in your users towards your product. As a solution try to see the question with the eyes of the user and consider whether they will be qualified to answer it straight away. Questions about preferred data formats, synchronization behavior, settings for features they are yet to discover, these are all candidates for bad first-time questions. Imagine a typical user, understand what they would finally prefer and set it as the default answer for them. When the time comes and they will need to override it, then they will take time to think about the appropriate setting and adjust it appropriately. But not at their first day with your software.
15. Keep color palette short
In your design stick with the minimum of main colors, 2-3 being the maximum. This is mostly applicable to web pages. Try to avoid menus that have items with all 7 standard colors. Decide on the colors of system text and user input. Stick to that choice on each screen. Don't suddenly change the pair of grey/blue colors on one page to the blue/green on the other. If you have button with orange and red color, use those everywhere. Do not make each page completely unique. Unless the work is done exclusively for design contest, many people will not like it, consciously or unconsciously. A different set of colors means the previously constructed mental model of the interface is not going to work, this page has to be learned and remembered separately. It requires extra time and extra effort from users, with hardly any perceivable benefit for them. If you look at the design guidelines of many companies, you will see that they mostly include 3-4 colors with the rules not to use more than three simultaneously. Look at well designed sites, you will notice the same limitation in place. Looking for bad examples, look at sites of various online stores. There will be all the colors there are, strong and bright to draw attention. It probably has marketing benefits, but from the usability point of view such sites are disaster. Keep your designs streamlined and professional, this will create a better image of your place and what is more important improve the experience of your users.
16. Adopt the mental model of your users
Whatever design concept you wish to pursue, analyze it critically. Look at it with the eyes of your users. Image your typical user, what knowledge they possess, what experience they have with software and projects like yours. What about their general computer knowledge? Will they be able to get your design idea immediately if they are not a software developer, not a web designer and not a person with vast computer experience? Can they guess what this feature does or would a little explanation be in place? Can they find some setting in your menus by simply thinking where it could or should be, or do you see that some reorganization will help? Do interface controls behave in a typical fashion or do they implement some unusual idea that will require time to adapt? How much does your program design and behavior model differ from usual applications to be seen around? The more difference there is, the longer a learning curve is going to be. The lower the user experience will become. With web sites in a field with high competition, a user can simply close the browser upon getting frustrated enough and check out the next site which is almost guaranteed to be just a few clicks away. And again, for most users the look&feel of your product defines the essence of it. Not sophisticated algorithms, complex data structures and perfect code architecture. Simply the interface, its look and its behavior. That's it. It's where you can get your users or repel them before they even get to experience your great internal algorithms and features in action.
The ideas above outline basic concepts and observations that belong to the interface design. They are simple but they are completely missed in most of the projects even these days. If you think about them and decide to adopt the ideas for your work, you will have your products vastly improved already. There is no doubt much more to the theme including user behavior studies, influence of colors, copywriting, adapting interfaces for different social groups and cultures and much more. This is a long and exciting journey but don't be overwhelmed. You can take short trips now and then and benefit from each one of them.
