Is performance engineering a different specialization from general software development

division-of-laborperformanceproductivityrole

A major objective of software development is to focus on delivery of features implemented in good quality code.

Knowledgeable developers are supposed to write software with good performance to the extent of their understanding (that is, in the software module they are working on). For example, they should be able to use appropriate algorithms and data structures when implementing various parts of the system. In other words, the first implementation which they wrote to satisfy a unit test would have the good performance characteristic that the final product is supposed to have.

However, when the system is large and complex, consisting of many components written by different people/teams and include multiple vendors, is it more productive for a company to separate the roles of performance engineering from software developers, so that software developers can focus on features and correctness that meet specification, and the performance engineer can focus on measuring and improving performance without affecting feature and correctness?

Put simply, are there two different hats, requiring two different mind-sets?

Motivation:

From the answers I got from another question An alternative to requiring red in TDD: reverting code change?, it dawns on me that during the main software development time, meeting functional requirements is a must-have while software performance is a nice-to-have.

  • Tests on functional requirements have deterministic outcomes, usually Pass/Fail, or Accept/Reject.
  • Performance characteristics don't have a fixed Accept/Reject target, but do have a metric which can drive the performance-optimizing effort.
  • Future changes in functional requirements may make it necessary to sacrifice/adjust certain performance objectives.
  • Personally, I do agree that there should be a quick feedback cycle between feature implementation and software performance monitoring.
  • In this question I'm arguing whether these two are separate specializations – although some people might be specialized in both.

Possible outcomes

When feature implementation and optimization are done by different developers:

  1. They will go into conflicts and nothing gets done. (contributed by @quant_dev)
  2. The resulting software has better performance.
  3. The resulting software has poor performance.

Related:

  • https://softwareengineering.stackexchange.com/q/59292/620
  • (Will ask in a separate question soon.) Is it possible that software performance issues can arise from large software systems that cannot be forecast even by the very knowledgeable software developers? Will a dedicated performance engineer be able to solve it?

Best Answer

No, no, no, you can't separate something that is intrinsically a part of the job.

Let programmers code any crap that makes all tests tick green and than tell the other team to rewrite everything to make it also work fast? Doesn't work that way.

It is a job of the same programmer who writes the code to also think about performance. If you free them of that obligation, what would motivate them to learn and make things better each time?

Having said that, there is a career path if you choose to specialize in performance tuning. But it's not like a daily job, it is rather you offering your consulting services to various clients to help with their performance issues. But obviously to be able to do that you must already have passed beyond being able to write just working code and have gained insight into how make working code a fast code.

Related Topic