"There is a difference between design optimization and code optimization - optimization is usually necessary at the design phase, and is not premature; not optimizing at the design phase can easily lead to bad architecture." and "Appropriate choices of data structures and algorithms are optimisations that are NOT premature."