Patterns
Each pattern describes a problem which occurs over and over again in our environment and then describes the core of the solution to that problem, in such a way that you can use the solution a million times over, without ever doing it in the same way twice
Christopher Alexander, "A Pattern Language", 1977
How the program creates objects
How classes and objects are composed to form larger objects
Algorithms and the assignment of responsibilities between objects