The two hardest things to do in computer science is knowing when to invalidate cache and how to name things.
And off-by-one errors.
And off-by-one errors.