Motivation
Designing reusable software is hard
usually impossible to get right the first time
takes several uses of a design to get it right
Experts base new designs on prior
experience
In many systems, you find recurring
patterns of software components
classes, protocols, etc.