I am a huge fan of software design principles such as SOLID and DRY. What other principles exist for OO software design?
Note. I’m
High Cohesion - How focused are the responsibilities of the modules you are designing.
Low Coupling - The degree to which modules rely on other modules.
A fairly comprehensive list from Wikipedia:
http://en.wikipedia.org/wiki/List_of_software_development_philosophies