One issue I have found is that developers always leave performance tuning of all projects to the end.Yep! Here's how that works:
1) You hear "premature optimization is the root of all evil" parroted everywhere.
2) You decide to leave the optimization for the end.
3) You develop code that performs suboptimally, sometimes even abysmally.
4) You develop more code on top of it.
5) You repeat the previous step until the codebase is big enough that optimizing away root causes of performance problems is too painful.
6) By this time you have to deal with releases and bugfixes and feature requests and maintenance and whatnots, so you settle for the advice from Coding Horror, where Jeff told you that throwing hardware at performance problems is cheaper than investing programmers' time in solving them.
7) Profit! Er, no, wait, that's the other list of steps...