Taking the time to ensure that you properly understand the problem you're trying to solve is probably number one on the list.
Properly understanding the tools available is number 2.
Automating away the writing of boilerplate code is also helpful. And if you care about the efficiency of your final code, than a good profiling tool is important.