Key design principles

The software engineer mission is to build useful and well-designed programs operated automatically or by people. These programs should not cause errors which result in accidents or frustration to the user. To achieve this, software engineers should follow key design principles in discipline.

Following the advice to “keep knowledge in the world” from Don Norman, I would like to jot down key design principles written in his famous book “The Design of Everyday Things”.

All of the following words are quoted correctly from the book (p. 215-216) without any modification.


People are flexible, versatile, and creative. Machines are rigid, precise, and relatively fixed in their operations. There is a mismatch between the two, one that can lead to enhanced capability if used properly. What we call “human error” is often simply a human action that is inappropriate for the needs of technology.

Given the mismatch between human competencies and technological requirements, errors are inevitable. Therefore, the best designs take that fact as given and seek to minimize the opportunities for errors while also mitigating the consequences. Assume that every possible mishap will happen, so protect against them. Make actions reversible; make errors less costly. Here are key design principles: