Skip navigation.

Performance (identified) requirements: Trap

agile | performance testing
Well, this is something I’ve touched several times, mostly telling the experiences. I’m going to be direct (or even offensive) this time and tell what I feel like: The view “documenting (identifying) performance requirements and predicting load is the right way doing performance tests” is a trap for all - testers, customers and management. I do welcome everyone who doesn’t think so to add comments. I also welcome everyone who doesn’t agree with that view or doesn’t think it is the most common one, to comment.

foreword
Some time ago I wrote Performance myths provoked by performance tools advertisement/docs where I tried to understand reasons for article by Robert that was critiqued by almost anyone.
James Bach recently wrote about personal attacks . I’m afraid that every experienced tester see Robert’s post “is directed against me as a person“, because it declines the performance tester role.

Just as James I would like to ask my friends and enemies (and Roberts’) alike to help me identify and correct any of my own bad behaviour.

More over the last STP Scott Barber talking about paradigm shift. What I was trying to say there in the old blog was, that the old paradigm (quite logically) caused the Roberts’ opinion.

So the (identified) performance requirements
It seems commonly accepted wisdom, that performance tests need goals. Goals should be measurable (among other characteristics listed in SMART). You should know how it all end up: convincing management and the customer that they need to define mathematically what are the performance needs, i.e. identified requirements. It is really hard to convert their expectations (unidentified requirements) to the requirements, but we are ready to suggest the methodology for it. We will let everyone think about it, understand how complicated it is and how hard it is to understand what they actually want.
Have you ever tried to document what are the performance requirements against your new car you want to purchase? Like how fast it should be able to accelerate from 0 to 100 km/h. Or what load(eight) it should be able to maintain (carry) and still provide no more than 5 seconds or response time when you want to accelerate from 100 to 120 in order to out-distance anyone. Is it a way you are thinking? How about running up-the hill: what is the maximum angle in your region, etc. ? Could you identify all those requirements and believe that you have really documented exactly what you want?

Performance expectations
Customer expectations are all about the production-time, long-term. The most significant, they expect that given the business changes it will be able to tune the system performance (for example by adding more hardware). And the business changes quite a lot.
Do you think that customers prefer comprehensive documentation of the system performance characteristics, the most reliable tools and process used to validate it? Do you believe that the performance requirements negotiated by contract are going to protect customer against issues in production? Do you think the performance test plans approved by all parties and correctly followed is what they want?
Well, that was what I believed in for years but found it failing all the time. Now look at agile manifesto and you will find that I’m actually quoting items “on the right“ while I have learned to value items on the left more in performance projects as well.

my vision: agility
I don’t yet have a complete understanding of how things should happen. I have some vision however. What I do in my projects:
1) Communicate with developers about performance (your experienced issues, patterns, etc). Developers as individuals are able to avoid performance issues. Sometimes you could avoid them by simply engaging a discussion.
2) Plan small steps, plan next steps based on information gathered so far: both from testing and communication. (Developer could tell you that feature X will not scale by design, so there is no sense to test it).
3) Set the goal to improve the system performance characteristics wherever it makes sense (in terms of cost VS gain) instead of achieve the pre-identified requirements
Well I have not yet concluded how to include customer. In item 3) we could make the most obvious decisions without them, but in a lot of cases we need to communicate with customers to understand if this improvement is worth it. It will however mean that customer will be required to forecast the gain... it should really be a collaboration, not the request to provide a signed answer.

I think Ainars is trying to make us think more practically

I think in the majority of cases the initial performance requirements have been set somewhat arbitrarily and are contrived. Where a real engineering exercise hasn't taken place, I think it it becomes difficult to provide anything but those types of goals. I've seen software specs for real-time systems that spoke to response time in every interaction between the code and a hardware controller down to the millisecond. This was done in accordance to the nature of the system, where time is money, or a mission objective, or a life. Mission-critical systems(Scientific, Aerospace, Military, Hardware Controllers) will have these performance requirements mapped out and defined. But we work in a different arena(Corporate Computing), with a certain flexibility that can be both a positive and a negative. Which is why even when things perform poorly they are still acceptable, the flexibility to move forward where gains in other areas and softer ROI issues get satisfied. Look at it from the CIO/CTO's view, the site/product may not perform well but it went to market satisfying say Wallstreet perhaps. I'm not advocating this I'm just trying to present our reality. So absent these well thought-out, clearly defined performance goals born out of the finest software engineering efforts on the planet where do we turn? We must turn to what we can discover through our own INVESTIGATION into the application at hand. Once we begin to start telling the client what their performance is, what is should be, and how they can get there we will earn the title of value-added. When we look to them, seemingly qualified to provide this information, yet rarely capable, we enter into the same old pattern of validating assumptions. The context of the system's architecture defines good performance not an SLA, not a number out of a research report or a usability study. All good sources as a reference point in their own rights but rarely the end all numbers we really need. Stay close to the actual context of the application and report your findings, gather information. Take a cue from the military and gather intelligence before hatching a plan. Survey the land, learn the capabilities, and assess the tools available. Performance testing needs to come out of the shadows of simply being an activity, and step more towards becoming a discipline whose requirements are as important as following RUP,Agile, XP, and any other methodology you want to choose.

Blog updated: requirements => needs

I was using wrong term, thank you for letting me find this. According to PMBOK there are identified requirements (needs) and unidentified requirements (expectations). This was all about needs trap. I will update the blog soon. I will mostly replace all occurrences of "requirements" with "identified requirements (needs)".
Hmmm... let me even say this way - if we have identified performance requirements, testing them is not performance testing, instead this is typical "conformation test" when we only validate requirements.
This is my belief (subjective) that "Performance testing as art is all about expectations"

Performance Requirements

First of all, you need performance requirements not for testing, but for development. How you can develop something without understanding how it is supposed to perform?

You often don't have it formulated, but you have them somewhere in minds of stakeholder (they could differ and they could be wrong). If you come to the project, you need to extract them somehow.

When you buy a car you probably won't formulute exactly each feature, but you usually understand very well do you want a red sport car or a big wan. The same is with performance requirements.

Moreover, there are numbers that stakeholders wants and numbers that are really required. There were cases in my practice when we started from 10,000 users and 3 sec response times and ended with 100 users with 15 sec response times (and, most interesting, it was still ok).

So my opinion is that you need performance requirements, but shouldn't agonize about them. They should give idea how system should perform and can be developed with time.

I still agreed with your vision and don't see how it contradicts with performance requirements. Only thing is that you need to do it with the final goal in mind. If you don't know the final goal, how do you know how much you need to improve the feature?

Isn't "barely sufficient" a principle of agile development? Without knowing what is sufficient you can improve features more than necessary.

Very thought provoking

I've been testing performance for about 5 years and I'm inclined to agree with most if not all of what you're saying, yet I feel like I still have a foot in the other camp for some reason I can't put my finger on just right now... I think I'm going to have to think about your post for a while.

I agree that goals are not necessary to measure performance. But I think they are necessary for the business, development, and the decision makers to decide if what you've measured is good or bad, to decide whether it needs to be improved or not.

Though I like what you're saying about talking to basically everyone you can to get them to understand the reality of what it means to test performance, up front, going in...

Comment viewing options

Select your preferred way to display the comments and click 'Save settings' to activate your changes.