Doors and User Interfaces

As part of the refit of our department we have got all new doors. These are rather swish, and the ones to our offices have windows in them, to let light into the corridor and give everyone a view of what we are doing. I'm going to stick a picture of someone working on the inside of my door window.

Anyhoo, the main doors have been replaced too. And they've solved a problem that has bugged me for literally years. They only have handles on one side.

Version 1.0 of the doors in our building had handles on both sides. This lead to significant levels of confusion and wrenched shoulders, as people like me grabbed a handle and heaved manfully to find that the door doesn't open that way. I got quite good at looking for door hinges, and even invented a rhyme to help me remember what to do: "If hinges you see, then you should pull me". Unfortunately not everyone did this, and so version 2.0 of the doors added little labels with explicit "Pull" or "Push" instructions.

Version 3.0 of the doors, where we are now, have the innovation that if you are supposed to push the door there is no handle to pull. This is a great idea, in that if you can't do something there should not be a way of trying to do it.

From a user interface point of view there is a school of thought that says if you can't do something, the option to do it should not be present. This means that unusable program functions should be either grayed out or missing. This lines up nicely with doors version 3.0.

I used to think that this was always a good idea, as it means that users don't get frustrated when they try to do something and the system tells them they can't do it. However, it can lead to even more frustration, where the option or command is tantalisingly visible but can't be used, or worse yet, other people claim that they have the command and you don't. In the case of doors it is easy to see what to do from the start, you either pull or push, but with software things are always more complicated.

In my programs I now tend to enable all the features and then have a helpful message that appears and tells the user what they need to do to make it work. Rather than saying "Not Allowed" the message would be "You must log in to perform this command" and give a link to the appropriate help.