I always thought premature optimization extended beyond the realm of code readability. Concentrating on small optimization details during implementation is wrong to me, since your first goal should be *functionality*. Once you've gotten something functional and readable, you then go back and do *iterative* profiling then (and ONLY then) optimize based on those results, if needed. For example, a lot of premature optimization decisions I see are "Well, lets use object A instead of object B, because object A should be faster...". However, this decision was made due to speculation instead of through benchmarks or profiling.

People can write readable code and *still* be making premature optimization decisions, IMHO. Your overall design of the application may be affected due to premature optimization.