- clarity and simplicity are of paramount importance
 
- the user of a module should never be surprised by its behaviour
 
- modules should be as small as possible but not smaller
 
- code should be reused rather than copied
 
- dependencies between modules should be minimal
 
- errors should be detected as soon as possible,
  ideally at compile time
 
(Joshua Bloch: Effective Java
http://java.sun.com/docs/books/effective/)
Johannes Waldmann
2013-06-11