There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-1 errors.