Clinton Forbes has a great blog post on this subject http://clintonforbes.blogspot.com/2007/04/on-shell-be-right-mate-approach-to.html and much of the writing in this chapter is based on the ideas he set forth.
The common wisdom is that you should never pre-optimize, instead you should wait until you actually discover something is slow and then optimize it. The problem with that isn't the advice but the fact that developers rarely do what it takes to find out if something is slow or not before deploying it. Some people also go the other way and spend time trying to optimize everything, which is generally just a waste of time and money because you spend your time optimizing things that just don't need it.
I wish claim credit for the following list of tips but honestly, it's a paraphrased version of Clinton's: