I loved this post by Michael Feathers
It basically says if you can't grab a class out of your design and quickly test it in isolation, then your design is not good enough. I like the idea of evaluating my code in this light.
I have noticed recently that my designs are distilling out into usable classes and mediators that pull everything together. The mediators need mock objects to test them. I am going to see how much code I can push into usable objects and away from the mediators.
Whenever I think about good design I am constantly bought back to Ash's Collaborative AID. It is a great example of a piece of software that is open for extension but closed for change.