What do performance teams do?

I get the following question quite a bit... What do performance teams do? 

Let me start by saying there are different types of performance teams.  There are Perf Development Teams, Perf Test Teams, "Central" performance teams, and Product/Feature Performance teams.

Perf Development and Test Teams share a couple of functions in common;

  • Do in depth analysis of performance issues using profilers (like the one in Visual Studio, AMD CodeAnalyst, VTune, ...) and other tools like Event Tracing for Windows (aka ETW - some tools to config/consume ETW are tracelog.exe, logman.exe, tracerpt.exe, ...) and Performance Counters (perfmon.exe)
  • AdHoc performance investigations to help improve performance in a troubled component
  • Help teams set and drive to goals for their product (what will the customer do and how to they expect it to performance? Boot in 2sec? Glitch free audio? Return the query in < 1 second?)
  • Implementing/Creating scenarios to measure
  • Educating teams on performance tools and techniques

Some things unique to Performance Developers are;

  • Implementing code changes in the product
  • Prototyping new algorithms / hardware

Some things unique to Performance Tests are;

  • Monitoring daily performance of released builds for the product
  • Implementing atomic (as close to the code being tested as possible) performance tests
  • Building performance tracking and control systems

The difference between central and product performance teams has more to do with the level of depth expected.  Central teams handle large products like Windows and SQL can only cover so much of the product.  Product performance teams and go in great depth on there components and may not look at the broader use.  In my experience the best is combinations of the two working together. 

So now to summarize the answer to "What to performance teams do?"  In general the teams help set performance goals, monitor performance throughout the product release cycle, do targeted and adhoc investigations, build prototypes, and improve the product code all to support releasing a product that meets customer expectations.

(Quick aside... I've move to the Windows Virtual Machines Team)