I have a close friend and co-worker that wrote a nice blog post on this topic. I would highly encourage that you take look at the post. I would like to make a few comments on item number 2 and 6 (Code or Architecture Review to correct performance issues) as these are areas that I see the most confusion with and are very important to understand.
I have snipped the two title topics from the above post to have provide context for my comments.
2- “We need a Code Review because our application has performance problems.”
6- “We need an Architecture Review because our application has performance problems.”
For some reason this seems to be a topic that many customers have a hard time understanding why a Code or Architecture Review shouldn’t be used to address performance issues. It’s really simply, you can have quality code, but use of poor design patterns can lead to performance issues. I would say as much as 95% of all code reviews do not lead to performance gains. The same holds true for Application or hardware Architecture, these choices can be great on paper, but when you factor in load and different usage patterns the choices could prove to be poor.
I cannot stress how important it is to have your development team use a test driven development methodology and planning for and allocating ample time for performance and scalability testing. Even if you are performing a large portion of your performance and scalability testing in-house, it’s always in your best interest to leverage a 3rd party or Microsoft Premier Lab Services for an unbiased prospective. When all the testing is done in-house there is high probability the numbers can be construed or altered in a way that appeases management. When you leverage a 3rd party for performance and scalability testing, you bring a fresh and unbiased set of experts to the table, which leads to metrics that are not skewed by politics.
To close this out, the message you should take away from this is a follows:
1. Don’t use “Code and Architecture Reviews” to correct performance issues.
2. Establishing and delivering a well performing application starts early in the SDLC (Software Development Life Cycle) and ample time needs to be factored into the SDLC for Performance and Scalability testing and don’t perform all the testing in-house leverage a 3rd party for an unbiased opinion.