I encourage a bit of clarification to #9. You said
Always avoid using atoms as keys
Atom keys are great! If you have a fixed number of them defined statically in your code, you are in no danger. What you should not do is convert user supplied input into atoms without sanitizing them first because it can lead to out of memory. You should also be cautious if you create dynamic atoms in your code. If you have a fixed upper limit to how many you will create, you are fine, but if they can grow without bound, then you risk out of memory.