Welcome to the second entry of my commentaries on The Design of Everyday Things by Don Norman and how it applies to the everyday software design. In this entry we'll focus on the interaction of the user with complex software and what the natural approach would be to design this kind of system. For this it is important to start with the definition of knowledge in the mind (or brain) vs. knowledge in the world (or in the system).

Knowledge in the brain is essentially all the knowledge that we must know before hand when executing an action. There are no cues to guide us through the execution of said action, only our knowledge of how to perform it. This is still prevalent in business or industrial software. Knowledge in the world, on the other hand, means that the information we require to execute an action resides in the physical world itself, or in our case, in the system itself. We can easily execute this action without familiarity with it or without memorizing a set of steps, because all needed information is available to us when performing the action, embedded in the object or system being used.

When people fail to follow these bizarre, secret rules, and the machine does the wrong thing, its operators are blamed for not understanding the machine, for not following its rigid specifications. With everyday objects, the result is frustration. With complex devices and commercial and industrial processes, the resulting difficulties can lead to accidents, injuries, and even deaths. It is time to reverse the situation: to cast the blame upon the machines and their design. It is the machine and its design that are at fault. It is the duty of machines and those who design them to understand people. It is not our duty to understand the arbitrary, meaningless dictates of machines.

Having developed business software for most of my career, it's worrying that this simple truth is still largely ignored. Such complex applications warrant the use of the best possible interaction paradigms, as well as innovative design which is familiar to users from everyday apps, giving the user less data to learn (again). I've heard more than once the old excuse that "this application is very complex, so we'll just explain everything to the users during training, don't worry so much about the design" or "it's already complicated, they'll just learn this new way of doing things". Knowledge in the mind is notoriously unreliable and without great design care and as much knowledge in the world (or system in this case) mistakes will inevitably happen, which is of paramount importance in systems in which undo is not easily done.

Unless it is your ambition to become a nightclub performer and amaze people with great skills of memory, here is a simpler way to dramatically enhance both memory and accuracy: write things down. Writing is a powerful technology: why not use it? Use a pad of paper, or the back of your hand. Write it or type it. Use a phone or a computer. Dictate it. This is what technology is for. The unaided mind is surprisingly limited. It is things that make us smart. Take advantage of them.

In software, this kind of action can be included in the system design itself. Instead of an endless list of fields the user must fill, provide the relevant information in each screen. This will, in general, increase the number of screens in your system, but will allow for less errors and less effort from the user, due to the minor reliance on knowledge in the brain. If this is not possible or feasible, allowing for notes or comments from the user to be updated during the execution of a complex action may be sufficient. Let the user type in notes that give him the necessary context to perform the action without errors. This contemplates information not available in the system as well. There is an exception to this rule, and that is the use of cultural knowledge. This knowledge is present in the subconscious of the user, as it is something ingrained into their everyday lives. However, it is easy to cause grave mishaps when relying on this type of knowledge: it differs from where the user is from. In this case and if you decide to rely on cultural knowledge, beware of your target audience and design accordingly, changing cultural references and parameters when such is needed.

As architects and designers, it is our mission to provide reliable software that simplifies the user's everyday life. In the corporate world, we, almost exclusively, build tools to ease common tasks. If from the start we focus on the psychology of ours users instead of the data structures we are working with, we'll build better products that people love to use and make everyone's lives a little bit better.