The two most difficult things in software development.
* naming things
* cache invalidation
* off by one errors * naming things
* cache invalidation
* off by one errors