I’m going to be use the terms quality, principles, and practices quite a bit, so it might be useful to explain how I am using them, just for the sake of clarity.
By quality, I am referring to an aspect of design that is desirable or, if missing, is a deficit. In general, the qualities I look for make it easier to change things, since maintenance is the major expense in most systems.
By principle, I mean general guidance about design, concepts that can inform our decisions in many different ways depending on circumstances. Principle are almost never perfectly achievable, but they are always important to keep in mind. The Golden Rule is a principle that we try to follow in polite society. That’s the sort of thing I mean.
By practice, I am referring to actions we take which have been accepted as universally good. Doctors always clean their hands and instruments. Carpenters always measure twice before they cut. Software has these “always” actions as well, and I want to examine and promote a few.
I will start with the qualities that all patterns share, then the principles they follow, then after I write about the patterns themselves I will cover some good practices that they promote.