Nordic Perl Workshop 2006

Seven Principles For Transforming Difficult Tasks Into Simple Ones

Seven Principles For Transforming Difficult Tasks Into Simple Ones

By Michael Schwern (‎Schwern‎) from PDX.pm
Date: Friday, 16 June 2006 14:00
Duration: 60 minutes
Language:


'[User Interface] Design should make use of natural properties of people and of the world: it should exploit natural relationships and natural constraints. As much as possible, it should operate without instructions or labels. Any necessary instruction or training should be needed only once... If the explaination leads the person to think or say, "How am I going to remember that?" the design has failed.'
-- Donald Norman, "The Design of Everyday Things

You plug in a USB device without needing instruction. You once again forget a switch to ls. You use a CPAN module with only a few glances at the documentation. You try to pull on a door only to find its labeled "push". Why are some things easy and natural to use and others a continual trial? How can you make software that needs no manual? How can you avoid writing
software which is the door everyone tries to pull? The answer, in part, is user interface design.

Programmers tend to have a casual understanding of human interaction design. We can identify good and bad designs but we cannot always explain why they are good and bad in concrete terms. We often do not even possess the vocabulary to describe what we mean or even think about it. As knowing Software Design Patterns changes the way you think about writing code, knowing user interface design principles will change how you think about your interfaces.

The seven principles of making tasks simple will be taught. Each principle will be illustrated first using a physical example, then an example in a computer user interface and finally it will be shown applied directly to programming.

The seven principles are:
* Use both knowledge in the world and knowledge in the head
* Simplify the structure of tasks
* Make things visible
* Get the mappings right
* Exploit the power of constraints
* Design for error
* When all else fails, standardize