The Psychology of Everyday Things

Donald A. Norman

Mentioned 16

Even the smartest among us can feel inept as we fail to figure our which light switch or oven burner to turn on, or whether to push, pull, or slide a door. The fault, argues this book, lies not in ourselves, but in product design that ignores the needs of users and the principles of cognitive psychology. The problems range from ambiguous and hidden controls to arbitrary relationships between controls and functions, coupled with a lack of feedback or other assistance and unreasonable demands on memorization. The book presents examples aplenty, among them, the VCR, computer, and office telephone, all models of how not to design for people. But good, usable design is possible. The rules are simple: make things visible, exploit natural relationships that couple function and control, and make intelligent use of constraints. The goal: guide the user effortlessly to the right action on the right control at the right time. But the designer must care. The author is a world-famous psychologist and pioneer in the application of cognitive science. His aim is to raise the consciousness of both consumers and designers to the delights of products that are easy to use and understand.

More on

Mentioned in questions and answers.

What is your best practical user-friendly user-interface design or principle?

Please submit those practices that you find actually makes things really useful - no matter what - if it works for your users, share it!



  1. KISS.
  2. Be clear and specific in what an option will achieve: for example, use verbs that indicate the action that will follow on a choice (see: Impl. 1).
  3. Use obvious default actions appropriate to what the user needs/wants to achieve.
  4. Fit the appearance and behavior of the UI to the environment/process/audience: stand-alone application, web-page, portable, scientific analysis, flash-game, professionals/children, ...
  5. Reduce the learning curve of a new user.
  6. Rather than disabling or hiding options, consider giving a helpful message where the user can have alternatives, but only where those alternatives exist. If no alternatives are available, its better to disable the option - which visually then states that the option is not available - do not hide the unavailable options, rather explain in a mouse-over popup why it is disabled.
  7. Stay consistent and conform to practices, and placement of controls, as is implemented in widely-used successful applications.
  8. Lead the expectations of the user and let your program behave according to those expectations.
  9. Stick to the vocabulary and knowledge of the user and do not use programmer/implementation terminology.
  10. Follow basic design principles: contrast (obviousness), repetition (consistency), alignment (appearance), and proximity (grouping).


  1. (See answer by paiNie) "Try to use verbs in your dialog boxes."
  2. Allow/implement undo and redo.


  1. Windows Vista User Experience Guidelines []
  2. Dutch websites - "Drempelvrij" guidelines []
  3. Web Content Accessibility Guidelines (WCAG 1.0) []
  4. Consistence []
  5. Don't make me Think []
  6. Be powerful and simple []
  7. Gestalt design laws []

I would recommend to get a good solid understanding of GUI design by reading the book The Design of Everyday Things. Although the main printable is a comment from Joel Spolsky: When the behavior of the application differs to what the user expects to happen then you have a problem with your graphical user interface.

The best example is, when somebody swaps around the OK and Cancel button on some web sites. The user expects the OK button to be on the left, and the Cancel button to be on the right. So in short, when the application behavior differs to what the user expects what to happen then you have a user interface design problem.

Although, the best advice, in no matter what design or design pattern you follow, is to keep the design and conventions consistent throughout the application.

If you're doing anything for the web, or any front-facing software application for that matter, you really owe it to yourself to read...

Don't make me think - Steve Krug

Try to use verbs in your dialog boxes.

It means use

alt text

instead of

alt text

I am making the distinction between User Interaction Experience and pure User Interface (UI) design here, even though there is often a correspondence. You can have great user interaction even with a ‘boring’ grey interface, (note that a boring interface is not a requirement!).

My bookshelf contains the following:

What other books or resources would you add to this list?

Anybody have good examples of usability disasters?

Here's an example. Hector is a manager with a large team. Department admin wants to send Hector a spreadsheet with his team's salaries. She types "Hector" in the Outlook "To:" field. It autocompletes to "Hector's Team" but she doesn't notice that until after she sends it.

Donald Norman's book The Design of Everyday Things - is one of the classics in this field. Many, many excellent examples of bad usability design can be found in this book.

Should be required reading in all HCI and Usability courses.



(amazon link: )

There is a huge list of usability disasters in Nielsen's Prioritizing Web Usability, including some that have already been mentioned.

A while back I read (before I lost it) a great book called GUI Bloopers which was full of examples of bad GUI design but also full of useful tidbits like Don't call something a Dialog one minute and a Popup the next.

What top tips would you give for designing/documenting a GUI? It would be particularly useful to hear about widgets you designed to cram readable information into as little screen real-estate as possible.

I'm going to roll this off with one of my own: avoid trees (e.g. Swing's JTree) unless you really can't avoid it, or have a unbounded hierarchy of stuff. I have found that users don't find them intuitive and they are hard to navigate and filter.

PS. I think this question differs from this one as I'm asking for generalist tips

User Interface Design by Joel Spolsky. You can read it in one afternoon.

I don't think that it's possible, in this little space, to give tips which would make it possible to design good GUIs (the question is as big as "how can I write good programs?"). But I can give pointers to some helpful books:

I'm a C++/Java developer and have no idea about .Net or GUIs. I need to develop a windows app for 2000/XP/Vista/7.

I think I've come to conclusion that C# is the best and the fastest way to go (please correct me if I'm wrong). What do you recommend? Which GUI approach should I learn? (Forms? Any other stuff?)

Is it the best way to compile in .Net 2.0 mode? It's going to be an application for the public to download.

I would recommend learning Winforms first, then move the WPF. Winforms is easier to learn and get something working quickly. The future however is WPF, so I wouldnt leave that in the dark. I posted some good books and links for GUI development work.


  • Design of Everyday Things A really good book about design of interfaces. It's not software specific but a must read for GUI designers.
  • Coding Horror. He recommends a lot of development books on his book list, but these ones are specifically interface-related:

Don't Make Me Think
About Face 3.0
The Inmates Are Running the Asylum
GUI Bloopers

Web Links

I'm new GUI and programming as whole and so far I have a general understanding of c and have spent quite some time writing console applications.

I'm trying to learn GUI but have so far been unsuccessful. I've tried learning wxwidgets (through official documentation), gtk (through official documentation) and win32 (forgers win32 tutorial) but still haven't quite gotten there.

I still really want to but can't seem to find any good material. What would you recommend as start for a beginner?

Reading a book will only get you so far. To take it to the next level you just need to experiment with what the API can do. Though you could get all down to the Win32 API level for your GUI, but if your just starting out just focus on trying different techniques out.

You will soon find out what works and what doesn't work.

If I would recommend a book I would recommend a nontechnical book.

Design Of Everyday Things

Next is a video post cast, about more psychological overview of designing a GUI and how to make your users and you happy.

Business of software - Joel Spolsky

Last one, this book will help you understand that, when you do design applications that people will view your asthetic decisions and choices via their own culture values. So, its important to choose one asthetic design theme for your application and stick with it.

The Culture Code

I've been using C# for a while now but haven't really homed in my UI design skills. At the time I design them, I find myself enjoying the design, but later on, I look back on it and see horrible work. An example comes to mind from my project at work where I had to use 127 buttons to represent 127 computers in our lab. :/

I was wondering if anyone could refer me to a site or book that would teach good UI design?


The most important to focus on first would be the work flow of things. Try to find the goals the user has and create a model the is as effective as possible in reaching that goal. Also read a lot around this one of the best books to start with is The Inmates are running the asylum

I would suggest lots of sketches here. Make sure you keep it simplistic to focus on what and where things are placed and less on how they look. A tool like balsamiq is great for fast UI mockups. Also go through UI patterns here to come up with concepts that work, Tidwells book Designing Interfaces is great and also Infragistics new patterns site are great resources

Now you have an idea on what you want to do, now is the time to put together the interface. Along the way from the first sketch to the last pixel - always user test.

And don't always follow the UI guidelines, it is OK to break them if you have a good reason. And last, you will only get one free unrelated 3D effect in an interface :)

The answers already give some great books on how to specifically design interfaces. I'd like to help with some suggestions to help you improve your nose for design. Some of these might be cheaply available 2nd-hand, or something you can borrow locally (I'm always willing to lend books to people in Perth, Western Australia):

The Design of Everyday Things by Donald A. Norman

The Humane Interface by Jef Raskin

Consider a single button.

At one extreme, we have a black OpenGL window, with:

  • outline (in white) of a rectangle
  • bitmap remdered font inside of it, saying "Ok"

At the other extreme, we have Mac OS X, a button that is:

  • well rounded
  • has some gradient showing light effects on it
  • nice antialiased "OK"
  • soft shadow of some sort

These two UIs present very very different user experiences. The former says "This is from the 80s" the latter says "this is professional".

This is something I do not understand well as a programmer (and don't know where to learn about this).

Does anyone know of a good technical resource for this? [I'd prefer things that draws upon psychology / perception literature to say why to do something rather than design books that just says "use color XYZ with a gradient of blah"]

You will want to read up on Human User Interface guidelines HIG and Usability:

Apple's Human Interface Guidelines

Windows User Experience Guidelines

Platform agnostic guidelines

Amazon has plenty of books on the HIG subject, but I'd also recommend books based on usability. Steve Krug's "Don't make me think" is a great book (mainly tailored for web usability) etc.

alt text

A classic: The Design of Everyday Things

Pretty quick read, discussed some of the psychology behind using and understanding human interfaces. It's a bit dated and doesn't directly focus on programming GUIs but I would start here.

I am interesting in creating a better User Experience (UX). There are a lot of books out there, what are some that would be useful to a software engineer?

I would also recommend The Humane Interface: New Directions for Designing Interactive Systems by Jef Raskin. Has some really inspiring ideas.

My favorites:

At some point in your career, you may enjoy this wonderful book that draws parallels across multiple fields of design. (For example, the "confirmation" technique occurs both in software design and nuclear launch control.)


How do I improve my Typing Skills?.**

I tried the test on I reach only:

You type 337 characters per minute You
have 58 correct words and you have 1
wrong words

How can I improve my typing speed? What free resources do you know of?

Should I learn the Dvorak Keyboard?

enter image description here

No need to learn Dvorak according to XKCD (and more here).

I also remember reading in The Design of Everyday Things that QWERTY actually does quite a good job or spreading the commonly used letters across your fingers and whilst the Dvorak keyboard is a little better than QWERTY the benefits aren't significant enough to justify making the change. (If I can find my copy I'll try and put up an exact quote.)

I think we're all aware of what "your company's line-of-business software" looks like.

your company's application

Are there any resources, rules of advice, or general tricks to visually taming applications like this? Our business's domain is pretty complex, as most are, and our customers demand a great amount of flexibility. Tracking a boatload of fields on each object isn't exactly avoidable.

Besides general advice, I'm also interested in usage and tools specific to WinForms. If there are any examples of (visually) well-designed software of this type, that would help as well.

There is a site that I visit every now and then to be reminded of what not to do: Interface Hall of Shame.

A quick googling turns this up, which goes more into detail of the most common UI mistakes, which boils down to:

  1. Non-Standard GUI Controls
    1. Looking Like a GUI Control Without Being One
  2. Inconsistency
  3. No Perceived Affordance
    1. Tiny Click Targets
  4. No Feedback
    1. Out to Lunch Without a Progress Indicator
  5. Bad Error Messages
  6. Asking for the Same Info Twice
  7. No Default Values
  8. Dumping Users into the App
  9. Not Indicating How Info Will Be Used
  10. System-Centric Features

There are some books that you should read too:

The Design of Everyday Things GUI Design for Dummies The Inmates are Running the Asylum: Why High Tech Products Drive Us Crazy and How To Restore the Sanity

Mainly, try to use the platform standard widgets, guidelines and rules.

Forgive me if this is the wrong place but I am curious as to how other programmers feel about this topic:

I am currently working on my portfolio site, it is being designed and built in silverlight 4. I initially started off with a typical stylised e-folio theme much like a standard website in terms of layout and flow.

As I work more in the concept stages something has struck me. Am I trying to shoe-horn yesterday into today? What I am talking about is UI expectations. I'm all for clean user interfaces but that does not mean they should not take advantage of new concepts in presentation right?

If you where to develop a site in silverlight as your own portfolio piece would you stick to the tried and tested "website" feel or would you try to come up with a UI that is intuitive and complements the technology?

I feel that UI discussions are all the more important now that all forms of web development are allowing better methods to engage the user.

One of the most important things in UI design is to avoid being "clever". Understand the cultural, psychological and experiential expectations of your users and meet those expectations, don't challenge them. If a user has to learn your UI concept, or an unusual mental model of information organization, you have failed.

Read The Design of Everyday Things and Designing Visual Interfaces to dig into these ideas more deeply.

There is (very nearly) no such thing as a new UI scheme - simply new arrangements of the basic concepts of user interaction - see the iPod click wheel, for example. Almost without fail, anyone who thinks they have come up with some great new interface concept has actually just come up with crap that doesn't follow any of the rules of UI design - and it's bound to frustrate users, make them feel stupid, or make them think the designer is stupid.

If you understand these basic pieces, you can use new technologies like Silverlight to put them together in better ways than ever before. Again, the key is understanding them and what drives them, and how they align with the user's conscious and unconscious needs.

As a web designer should i learn 3d programs too over development skills? curious to see what people say.

Looking at most web sites today, I'd suggest the world needs more great web designers rather then web designers that also happen to also know 3D and development skills.

So, read books from Steve Krug, Alan Cooper, Don Norman (and others) on good design and look at as many good/bad web sites as possible and think about what actually makes them good or bad.

Aim at becoming the best web designer you can be, rather then becoming a generalist who can do many things but none brilliantly.

In my opinion this will enhance your employability rather then reducing it because there are a million bad web-sites for every one intuitive, easy to use, web-site out there. If you become a great web designer you will always be in demand.

I study GoF Design Patterns book and have Martin Fowler's PoEAA book in list. (I also have Judith Bishop's book which I personally do not like.) But there are more patterns, such as Delegation pattern. What is its origin? Are there other patterns not mentioned in these books? Are there other "must read" books or online resources on this topic?

Design Patterns: Elements of Reusable Object-Oriented Software and The Design of Everyday Things are very good books. I especially recommend the former for its intuitive read.

Are there other patterns not mentioned in these books?

Definitely. The GoF patterns are kind of the grandaddies of it all, and fairly general, but you can have domain-specific patterns too. Like Fowler's PoEAA, as you mentioned. Or design patterns for embedded systems. But also more domain-specific than that, like Fowler's book on Analysis Patterns, which has financial and health care related patterns. Or patterns for avionics systems, like in the link available here at the Hillside Patterns Catalog.

What is its origin?

If you mean what is the origin of the Delegation pattern, I dunno, but someone has asked a similar question here.

Are there other "must read" books or online resources on this topic?

The amusingly-named "PLoP" conferences (Pattern Languages of Program Design) are the first place a fair few patterns are aired I believe.

There's a PLoP journal as well: Transactions on Pattern Languages of Programming.

I found Design Patterns Explained to be quite useful in explaining some of the original thinking behind the Gang of Four patterns. It's an explanation as opposed to a reference.

In addition to the PluralSight catalog mentioned elsewhere, NetObjectives have some great resources on patterns (and principles in general), particularly their series of webinars.

Qt (pronounced officially as cute (/kyut/) though commonly pronounced as Q.T. (/ˈkyu ti/)) is a cross-platform application development framework widely used for the development of GUI programs (where it functions like a cross-platform widget toolkit), and also used for developing non-GUI programs such as console tools and servers. wikipedia

Qt was created by Trolltech, and was acquired by Nokia in 2008. One month after the end of symbian development at Nokia, Nokia decided to sell Qt. From September 2012 and until now Qt is managed by the Qt Company which is subsidiary of Digia.

Current version:

The latest official release is 5.7. The major version indicates API and binary compatibility.


There is extensive official documentation (all classes) available on Qt's website, in addition to tutorials and examples. You will often see these tutorials and examples referenced in the questions and answers on this site. Qt also provides an integrated development environment named Qt Creator. Though it mainly aims at creating Qt applications, it can be used to create regular C++ applications.

Tagging recommendation:

You will often see questions tagged specifically as , , or to indicate that the question is related to Qt 3.x, 4.x, or 5.x respectively. Qt 3.x is no longer supported and Qt 5.x has been released a while ago, so the default when version information is lacking is to assume version 5.x of the API.

Writing recommendation

Qt is a cross-platform application development framework, but QT (QuickTime) - is an extensible multimedia framework developed by Apple Inc.


Qt is available under four different licenses:

  1. GNU General Public License (GPL) version 3.0
  2. GNU Lesser General Public License (LGPL) version 2.1
  3. GNU Lesser General Public License (LGPL) version 3.0
  4. Qt Commercial License (which comes in three versions with different features and prices: "Indie Mobile", "Professional" and "Enterprise")

Video Courses

Pluralsight has a series of three courses on Qt:

Introduction to Qt: A C++ Cross Platform Application Framework
Qt Quick Fundamentals
Integrating Qt Quick and C++

Pluralsight is a subscription based but if you're only interested in Qt you can send the author @todgentille a private tweet and request a week long VIP pass. You'll get unlimited access to the higher subscription level for a week that allows viewing online and offline and you can download the course materials.

Voidrealm released a full free series of Qt tutorials for beginners on his youtube channel.


Qt introductory books:

Integrated learning of Qt and C++:

Concepts of UI design:

Please check out the official Qt documentation for more details of recommended books about Qt programming.


Please do not answer poor questions that will likely get closed or even deleted later. We are aiming for high-quality in this tag and so we do not wish to encourage poor questions coming by feeding them with answers.