Too Long; Didn't Read
There are some traits that I use to check my software against. Probably the main one is <a href="http://www.codemanship.co.uk/parlezuml/blog/?postid=934" target="_blank">Reused Abstraction Principle</a>. It says that your abstraction is good only if there are more than one implementation. In other words, it poses that abstractions should be, well, abstract.