Sunday, May 1, 2011

Three steps to making great performant software

Over the last 20+ years I have been teaching and learning about performance and its time to return more of what I've learned to the public domain.  My knowledge is based in OS (was a Windows and IRIX kernel developer as well as the Hyper-V perf lead), DB (lead the SQL Server perf team), web apps, compilers, image processing, optimization, and much more.  I've worked at the best companies like SGI, MSFT, and now Google which has also given me a wider perspective.

So now that you have a little of my background I'm going to teach you the three steps to making performant software.  You Ready?

Step 1: Have a plan
Step 2: Instrument
Step 3: Measure and Track

Yep... thats it.  Now to put this into perspective the diet industry also has three steps

Step 1: Eat less
Step 2: Exercise more
Step 3: Keep doing 1 and 2

However simple those three steps are there is a mutil-billion dollar business out there to teach them to us.  The steps are not easy and there are a lot of nuances like "What should I eat less of", etc. The three steps to great performance is a lot like the diet steps.  There are a lot of nuances and in coming posts I'll detail them more.  For now I'll give you a quick rundown.

Step 1 is to have a plan.  This means you have an idea of why you are trying to improve the software and how you want to improve it.  You have some goal in mind.  If you have no goal then why are you performance tuning?

Step 2 is to instrument. This means you will be putting markers into the code you are measuring in such a way you can figure out how close you are to your goal.  There are lots of ways to instrument with the simplest being  a printf, performance counters, Windows ETW, etc.

Step 3 is to measure and track.  This mean with each change you make you'll measure the impact it has on your performance goals and track it overtime.  If a regression shows up you'll be ready to fix it.

I can't wait to dig into the three steps more with you...

  Tony Voellm

1 comment:

  1. Drilling into the details of step 2 we can start tuning:
    Memory management
    Database queries
    Jms messaging - queue management
    Thread dump analysis - compare threads over time

    Nice article