Software design is the act of determining the user's experience
with a piece of software. It has nothing to do with how the code
works inside, or how big or small the code is. The designer's
task is to specify completely and unambiguously the user's whole
experience. --- David Liddle, Bringing Design to Software
[Liddle96] Here are the beginnings of a pattern language that
can be used to generate software designs which are user
centered. By user centered, we mean software designs that place
the user's experience first and foremost. We will be
concentrating our patterns on the place where a user interacts
with the application: the user interface. Even if a software
system is architected in such a way that its internal structure
and operations are efficient, elegant and correct, it is
ultimately the interface by which the end user judges its
usefulness. We have spent decades perfecting the craft of
software engineering and we are only now starting to concentrate
on the human-computer interface. That interface n