title: Should software be designed with performance in mind?
body: <p>Is it advisable to zero-in on design of a component or architecture of a software with performance in mind? What I mean is, how ready should the design/architecture be to used in a performance-intensive environment?</p>
  
  <p>While designing components, should we just follow good OO principles and just ensure that the component is 'extendable'. This way we tweak the design a bit here and a bit there as and when we run into performance issues. Although this way, we would often land up in performance issues where tweaking software a little bit might not help.</p>
  
  <p>Alternatively, should we come up with a design, although complex, makes performance issues a cakewalk. We would still need to tweak the software, but the tweaking is often very simple as the design is performance-oriented.</p>
  
  <p>Note: In neither of the cases listed above am I trying to tune the performance of the software before running into performance issues. To re-phrase the question, should the design of the software be performance-oriented?</p>
  
  <p>Please do not answer me saying that it all depends on the environment in which a software is expected to run. The reason being that clients of any industrial-grade software just seem to want more and more and more all the time. You may not <em>plan</em> your software to be constantly running in performance-intensive environments, but what if it has to? Should we then re-design the software when we sense that?</p>
  
  <p>This question has been troubling me from a week and I don't have an answer yet. What is your take on this?</p>