There are only two hard things in Computer Science: cache invalidation and naming things.

— Phil Karlton (http://martinfowler.com/bliki/TwoHardThings.html)