The Question
A friend of mine recently asked the Twitterverse the following question: “Can anyone recommend a good book on designing a good software UI? What works, what doesn’t, and in which situations.â€
The Simple (but ultimately unhelpful) Answer
Keep reading for the real answer.
The Difficult Answer
I love it when people ask me this question, because it means that they are actively thinking about the Interface and they want to improve. I applaud their willingness to change. Unfortunately, wanting to change and reading a book (or two) will not get them the results they desire.
User Interface Design is a huge field of study, a speciality of decades (even centuries if you talk about Information Design) of research and learning. Â There are undergraduate and graduate programs around the world that teach only this subject. Â Succeeding in one of these programs is only the beginning. Â Experience is what really counts in this field. A person, my friend or any person, is not going to learn this subject by reading one book.
It’s akin to me going to the bookstore and buying “The Complete Idiot’s Guide to Starting Your Own Businessâ€.  Sure, this book will tell you the basics and give you some insights, but it’s only the tip of the iceberg.  Starting and running a business is an extremely complicated process and to think one book is going to get you there is woefully short sighted.
My problem with the original question is that it is naive. Â Â It is naive to think that simply having the rules will allow you to effectively apply those rules. Â It is naive to under-value practical experience in this field. Â It is naive to treat an entire field of study as an after-thought.
The Real Question
The real question being asked is “Are there a couple of things that I can do to make my interfaces better?â€
The answer to that is No … and Yes.
No, because as I’ve just said, there is no way to summarize quickly an entire field of study or years of experience.  Do not under-estimate just how valuable these things are to someone practicing in the field.
Yes, because I believe there are a number of tips that everyone can use to make their interfaces better from day one.  I’ll go into these really briefly, but I want to be very clear there’s a whole lot more to it, a whole lifetime of learning if you are willing to do it.  It’s an amazing, wonderful field and I thoroughly encourage everyone to study it.  Just be warned that it’s big, complex, and sometimes very unrewarding.
Remember: Interfaces are Everywhere
Anything people interact with is an interface: A Dictionary (the physical book kind) is an interface, a web site is an interface, a form you fill out for your employer is an interface, and a software API is an interface. Â Each interface needs to be designed for the user. Â So the next time you design something that someone else is going to use, or even for your own use, consider: how the interface works, how easy it is to use, and whether or not it meets your needs.
The Real Answer
While I encourage you to go and read the above books, if you do nothing else, keep the following rules in mind when you are designing any sort of user interface.
Consistency
The number one thing any software engineer can do to make interfaces better is to make things consistent.  I cannot begin to tell you how many interfaces I see that are inconsistent. (I’ve even made this mistake myself a number of times.)  If you do something one way in one part of your interface, always do it that way throughout the entire interface.  For example, if the Okay button is on the left and the Cancel button is on the right, do not change the order of these things somewhere else in your interface.
This also means adhering to the consistency norms defined by your Operating System or Operating Environment (a Web Browser is an Operating Environment). Â Yes, you might not like it and you might think you can do it better, but the interface is NEVER (underlined and bolded) about you. Â NEVER.
Details, Details, Details!
Anyone who does Interface Design should be horribly detailed oriented, almost compulsively so. Every aspect of your interface needs to be examined to ensure that the details are, going back to my previous point, consistent. Â Form fields should be the same size, buttons the same size, everything aligned correctly, everything positioned perfectly, etc. Â The details of the User Interface are the critical difference between good work and sloppy work. Â And sloppy interfaces are bad interfaces.
Nothing annoys me more than going to another company and filling out their poorly designed forms. Â (My current company is especially bad at this.) Â These, as I mentioned before, are interfaces and spending a little time to make them more clean and more clear is worth its weight in gold. Â I have, in the past, walked out of companies that were interviewing me merely because their HR forms sucked.
Know your Users
When beginning your design the first thing you should be asking yourself is what do you know about your users.  Shniederman and Cooper (the books above) can tell you a lot more about Actors and User Stories and all that, but it really just comes down to understanding how your users like to work, and how your interface is going to make some aspect of that easier.  So, get to know your users.  Are your users computer illiterate? If so, it’s not likely that they will understand something like Drag and Drop right away. Once you understand your users motivations and needs, then you can begin to design a system that best reflects them.
This is often very tricky because none of us have millions of dollars to do user studies, and shadowing, and user testing.  A lot of times our customers are abstract visions of customers.  That’s okay.  Just take some time to try and imagine (acting or role-playing training can be really helpful here) what those customers motivations and needs would be.  It’s not perfect, but it will do in a pinch.
Ease of Use
So it goes without saying that the easier to use an interface is, the more people will like it.  Of course, this must be tempered against the motivation and goals of the actual users.  So the real goal is that it must be easier for the users to do what their motivation and needs require.  I once read that Ease of Use can be defined as the number of mouse click or keyboard interactions required to perform some task.  It’s not a perfect measurement but keep it solidly in mind when designing.  And this segues into my next point…
People are Lazy
Assume that people are lazy and you will never be disappointed.  They want to do the least amount of effort for the greatest amount of payoff.    I call this the commitment factor: how much of my effort do I have to commit to receive the greatest payoff.  This is why the Lottery is so effective.  It does not seem to matter that statistics are stacked against the players, they still play because it’s easy to play and the potential reward is huge.
In interface design this is equally true. Â The users will like any interface that makes things the easiest. Â The converse of this, however, plays a valuable role as well… the users will like any interface that makes things easier, so long as they can control the results. Â This means that lottery users like playing the lottery, so long as they can pick the numbers. Â The more complicated the system to automatically pick the numbers, the less the users will like the results.
Ideally, the best systems are predictive systems that let the users control just the right amount of variables. Â What is the right amount, well, that where iteration comes into play. Â Try a low amount, try a high amount, calculate the best amount, and then keep refining.
Understand Flow
Cooper defines Flow as “When people are able to concentrate wholeheartedly on an activity, they lose awareness of peripheral problems and distractions.†(Cooper, 4th Edition, p119). We’ve all had these Flow moments: where what we are doing is so focused, so in-depth that we don’t notice external things such as what time it is, coworkers leaving for the day, or even phone calls from our significant others wondering why we are not home yet.  This is Flow, and it’s a very, very good thing.  Flow allows users to work on their specific need at an optimum level.  It is the goal of every good interface.
Poor interfaces interrupt flow with things like unnecessary dialogs, errors, hard to use process, etc. Â The interface that interrupts less and is easier to use helps to encourage Flow.
As part of Flow I generally include visual flow in the discussion. Â Visual flow is the ability of the human eye to find what it needs. Â To this end, interfaces that focus or showcase what is most important to the user are better. Â In the western world we read top to bottom, left to right, so items on the top left receive more attention than what is in the bottom right. Â Keep this in mind as you build your interface.
Also, be aware that animated things attempting to engage or grab the users focus on your interface ALWAYS disrupt flow. Â Use animation to enhance, never to engage. Â Assume users have become oblivious to animated, blinking things and largely screen them out these days.
Design for Accessibility
One of the big failings of modern day design is that they fail to account for differences in human beings. Â Some human beings cannot see, some cannot manipulate a mouse, some cannot determine the difference between red and blue. Â Build for accessibility. Â Be aware that some people view your site in really low resolution and that some view it in really high resolution. Â Account for the differences in your fundamental design and from the beginning. Â Going back and having to engineer your sight to meet section 508 standards can be extremely painful. Â Do it right from the start.
One of the big things here is when sites use color to indicate differences. Â Estimates seem to place color blindness in the US as 10 to 20% of the population. Â Therefore using a color to indicate that some change has happened is not an acceptable solution. Â When in doubt use a color change AND some other indicator (selection count, underlining, etc) to indicate response.
Feedback
Feedback is the process of responding to user behavior. Â The more feedback, the more the user knows that they are doing things. Â A common flaw is to do something without providing feedback to the user that something is occurring. Â We see this in lots of User Interfaces because almost all User Interfaces rely on a single thread model wherein the interface rendering and response happen on the same thread as most processing. Â The developer who pushes processing off into other threads (or into WebWorkers in the Web space) can respond with appropriate feedback to the user without waiting for the process to resolve.
Feedback is a key factor in responsiveness of a site and responsiveness is a key factor in a sites usability. Â The more response a site appear, the more users feel like they are in control of how the system is behaving.
You Cannot Please Anyone
Just assume that no matter how great your user interface, not everyone is going to like it. Â Instead, your goal should be to hit the 80% of user whom will like it. Â There will always be edge users whom have different motivations and needs. Â So upfront, identify all the users and determine what the 80% is that you can achieve.
Sure, it is possible to build an interface that scales to every type of user. Â However, you will spend a disproportionate amount of time on the last 20% than on the middle 80%. Â Think of a bell curve,and try to get the middle of that curve.
I know two sections back I just said to design for differences, but there is a separation between accessibility difference and designing for the edge users.
Learn from your Mistakes
Finally, learn from your mistakes. Â I always believe that next version of your interface will be superior to the previous version, largely because you learn from the problems your users had with the current one and build a tighter interface for the next one.
As a co-worker of mine often says: It’s an Iterative Process.
Conclusion
So that’s what I have for you.  My long answer to a friends very simple question.  I hope I did not insult my friend, but the reality is that things are much more complicated than his initial question assumes.  That said, maybe my last section really answers the question he wanted answered.  Remember, User Interface Design is extraordinarily complicated.
A Final Note: Â This topic does not take into account the whole Graphic Design aspect of UI design. Â For that is an entirely differently field of study.