clean-code: as much "SOLID" and "DRY" principle as possible - HOWEVER let us not be fooled - don't start morphing your code because you got 4/5 of the solid and you really want to fit your code in. Simple and concise classes that don't make a coder go and read how the code is created in the core is very helpful and classes/functions that are intuitive without the need to switch back to documentation (though adding documentation to code helps). Finally: least amount of comments in function headers help (if i need to read a paragraph to know what that piece of code does means it smells IMO)