Performance Engineering is an important software development discipline that ensures that applications are architect-ed, designed, built and tested for performance. However, mostly in traditional projects, the scope of performance engineering is limited to performance testing where instead of identifying the workload patterns and improving the process leading to better performance, the focus is on beating the clock under tested conditions. Balasubramanian,P shares an interesting perspective on building performance engineering practice in Scrum.
Balasubramanian provided the following overview of performance engineering activties,
- Collecting and validating the non functional requirements
- Developing the required models for analysis
- Developing a performance test strategy
- Reviewing the architecture and application code to ensure compliance to performance best practices.
- Reviewing the deployment of the application, and
- For pre-existing applications, reviewing the design and code to suggest appropriate tuning activities
According to him, performance engineering should be an essential activity in Agile because
- It provides immediate feedback about the system in each sprint
- It is easy to develop a false impression about performance – This is particularly true in Agile projects where a lot of focus is on delivering business value in each iteration. This usually results in diminished focus on the system quality attributes.
- Refactoring may introduce code that performs poorly.
- The goal is shippable, production quality code - Performance engineering helps in ensuring that the system is designed, built and validated against the required 'Quality of Service' requirements.
Balasubramanian suggested focusing on the following four phases for introducing performance engineering in Scrum.
I. Planning Stage
Understanding requirements and planning for performance engineering activities.
- Use cases and Performance – Understanding the system qualities associated with every use case.
- Performance Test Strategy – Detailing out scope of performance testing, infrastructure needs, tools, licensing cost, metrics and results format.
- Identify Performance engineering activities in product backlog - Activities like workload modeling, performance testing, performance assessment etc should be a part of the baklog so that they are not missed.
II. System Architecture Phase
Validating the architecture in terms of system qualities apart from functional and business requirements.
- Architecture Assessment – The Performance viewpoint – Keeping a focus on quality, the architecture must be assessed using either of
- Architecture Tradeoff Analysis Method
- Cost Benefit Analysis Method
- Active Reviews for Intermediate Design
III. Sprints
Building blocks for producing shippable, production quality software.
- Code right – Apart from regular coding guidelines there should be guidelines about achieving good performance.
- Create Performance Unit tests - Developers should write unit tests that tests the performance of the application developed in a sprint. Though, initially the benefit would be minimal because the system is evolving. However, as the maturity of the system grows the performance unit tests become more useful.
- Review Design and Code – Automated code reviews using tools like JProbe, FxCop to test for performance issues related to code.
- Identify and Automate Performance Tests – Performance test should be identified and automated if possible for the 'Sprint n' in 'Sprint n-1'.
- Identify bottlenecks and fix performance issues – Performance issues identified in 'Sprint n' should be fixed in 'Sprint n+1'.
- Performance Engineering Sprint – Finally, the teams should consider having a parallel performance engineering sprint for every 2-3 normal sprints. Activities like performance testing, performance assessment, capacity projection can be carried out in this sprint
IV. Closure Phase
Deploying the complete application in the production environment.
- Setup Performance Monitoring Systems – The production system should be monitored using tools like JAMon to report performance issues in real time.
In order to make the adoption process easier, Scott Barber provided a detailed collection of tips to the performance specialist on how to engage and be productive in an Agile project.
Balasubramanian does acknowledge that there are multiple challenges in building a performance engineering culture in any project. The biggest challenge being the mindset change to focus on system quality attributes just like the system functionality. However, the rewards for building performance engineering practice right from the start far outweigh the investment and the benefits start multiplying with every sprint.