2013-09-03

izard: (Default)
2013-09-03 05:20 pm
Entry tags:

Software performance engineering [1/2] :Two facets.

There are two most common types of jobs in the area of software performance engineering. It is possible to be a part of a product development team and to tune a single product, or to work as a consultant for different customers and to tune multiple products.

These two types of work is essentially about the same thing. Both consist of [measure/profile, formulate a hypothesis of what can be improved, implement the improvement (one at a time), measure the effect, repeat until satisfied]. But there is an important difference! When you start working on the performance of an in-house product, you perform iteration 1, then 2, 3, etc, etc. Each subsequent cycle is a little bit more complicated. Starting from around iteration 20 you have to solve really hard puzzles. It may take days or weeks just to come up with a new optimization idea. The product evolves and this adds complexity too.

When you are a consultant, you are coming to a customer and doing the cycle for the iterations 1-10. 1-5 is impressive (picking the low hanging fruits), but can be a bit boring after a while. Sometimes, if a development team tried optimizing by themselves, you can do iterations 5-12. In rare cases of a good local performance team you go straight to iteration XX and do just a single iteration together, if you are lucky.

So, when doing performance engineering the choice is to either become a deep thinker, a wizard of solving puzzles, or to come here and there to fix few simple things.... Actually this dualism is not quite as simple. More on that in the next post.