I come from a DBA world and performance has always been an obsession. I am turning to development and I always think about performance, constantly, all the time.
Reading
I find my typical pattern for working through a unit of development is:
Put together the least version that works through the primary use case from beginning to end. In this step I mainly focus on bare-bones simplicity and a good implementation of whatever patterns apply.
Step 2 is to refactor step 1 mainly with an eye toward simplifying. Since I've been doing OOP, the one thing I seem to be able to count on is that this step always presents lots of obvious simplifications and actual reduction in code. It also is the point where the obvious abstractions fall out (which is another simplification.) IMPORTANT NOTE: This has a strong secondary effect of addressing performance, especially when you have done it a few times and you know where the performant antipatterns are.
Often, when #2 is done, things are satisfactorily performant, but the tests will confirm this or not; and also point out the (usually very few) locations where optimizations need to be addressed.
Increasingly I see that any time I spend thinking about efficient design in phases 1 and 2 messes up the simplicity, which at that point is primary.