> 1) what to name your variables
The canonical version of this is "naming things". It's more general than just variable names as anyone who has dealt with a thingAbstractFactoryFactory or the problem of generating unique names in a distributed environment will attest.
1) what to name your variables
2) cache invalidation errors
3) off-by-one errors