Most development teams today use some flavor of DevOps to accelerate their delivery of value to the business. In this “Need for Speed”, architectural paradigms for areas like Application Performance don’t get the importance they deserve.
Performance gets relegated to the Testing team – with some load testing done before release, and then some band-aids applied to improve performance. In the long run, Architectural flaws and wrong design decisions can cause significant impact application support, operations, customers and ultimately the business.
Performance Engineering is not a new concept – older Architectural frameworks still talk about designing systems for speed along with accuracy, evaluating trade-offs in design, thinking about scaling for distributed transactions and optimizing code. But the rise of Cloud has pushed some of this thinking to the backburner – the Cloud provider guarantees some response times, hardware scaling is a given, service meshes can spin up new instances o keep up with load etc, so why design for performance? In this post, we look at why Engineering your application for Performance based on tests is still important and some ways to incorporate into your Software Development practice.
Why Performance issues are important?
Industry research shows that Application performance is directly linked to Customer Experience, Conversion/Adoption rates and ultimately revenues. It’s no longer possible to say “it’s ok in our industry” or “it’s a B2B application, so users don’t care” – software users today use a wide variety of apps in their work and personal lives and have come to expect the same experience across all of them!
Even if your teams are practising highly matured level of DevOps, Effective Performance Engineering early in the game can help to deliver higher Customer Experience and ROI.
KEY POINT: Application Performance is an important contributor to Customer Experience, perceived application Quality and Conversion rates.
Where do we start?
There are many aspects of Performance Engineering such as:
- System Goals (Response Times, workloads, resilience, endurance etc)
- Performance Modeling through different scenarios
- Architectural Frameworks, Guidelines, and Patterns
- Infrastructure and Deployment planning
- Performance Testing and Tuning
Let us start in reverse – the Performance Tests. Typically done at the end of the Development phase (before Release), the modern way of doing is to design smaller performance tests early in the development phase. This allows performance issues to be caught early enough, to fix the design and not just the bug!
- Adopt a Performance Engineering Strategy from the Requirements Phase
A shift from addressing performance issues at the end of the cycle to defining the strategic performance objective in the beginning helps in building right Performance Engineering Plan. To define performance objectives, business, project, and application teams must work together to create SMART performance goals.
Performance objectives must have clear metrics and numbers for teams to improve the application performance. A clear Performance Engineering objective can be “Our application must support on-boarding of new customers (up to 4000) and current customers base of 7000 with an average page loading time of 0.10 seconds with 99% availability.”
The message to teams is simple. This is a time to revamp how we look at application delivery processes–to enable high-quality performance deliveries and to reinvest time and efforts in building resilient applications from the designing phase. Teams can achieve this by defining proper metrics and goals for engineering teams.
- Integrate Performance Testing in CICD
Just like functional testing, DevOps teams must stick to “Test Early, Test Often” rule for Performance Testing in CICD process. There are a lot of performance testing tools available in the market–both on-premises and SaaS based that can help teams to identify performance issues and remove bottlenecks from the process. Some popular tools are Micro Focus - LoadRunner, StormRunner Load and Silk Performer, Tricentis Flood, BlazeMeter, Apache JMeter, LoadComplete, Parasoft, and many more.
Based on application and testing requirements, teams can select the right tool to reap the benefits of testing early and feeding the output back into systems to improve performance.
- Optimize Pre-Production, Testing and Other Lower Environments
Performance issues are usually addressed at the last stage because they emerge mostly in live environments different from lower environments. With DevOps and Automation, it is important to replicate pre-production environment as close as possible to live environments. This will make performance testing as perfect as possible to reduce the issues in live. Teams can attain the same using cloud technologies and automated provisioning of servers.
- Establish Feedback Loop to infuse performance information back into application for improvement
It is difficult for teams to understand application behavior during user interaction and adjust their engineering processes accordingly. This requires building feedback loops by monitoring applications and user behavior in live environments and adjust the parameters they are working on for better and effective results. This closed loop system will collect information about application performance and with this continuous information stream, teams can improve performance indicators continuously.
Applications teams must take multi-tool approach to monitor Performance using Digital Experience Monitoring tools with a combination of Analytics and AIOps tools to find out the correlation of performance indicators and application features.
Qentelli’s Performance Engineering Approach
Our Quality Engineering services integrate Performance Engineering right from Requirements Gathering and Planning phase. We work with clients to understand overall application landscape and performance objectives to determine APM, Infrastructure and Environment Set up. Our team determines Performance test tools to set up and configure tools based on the application stack. This helps us in collecting right test data to fine tune our approach.
We work with Application Architects to develop Performance Engineering plan by developing suitable test scripts based on user flows, adding/modifying scripts by parameterization, adding checkpoints and establishing correlations. Our full-fledged DevOps team perform dry run of test scripts in test scenarios.
We monitor Production Environment, Test Data, Application Monitoring tools and logs access to do sanity runs that confirm stability and environment readiness. This helps us in creating tailored Performance Engineering plans for applications and DevOps teams.
We believe Performance Engineering has to stretch beyond conventional thinking and approaches; it must be engrained in the Continuous Delivery methodology and DevOps philosophies at enterprises. The goal must be performance engineering with a mindset to eliminate bottlenecks, proactively upstream and an effort must be made to understand and predict production application behaviors.
If you are looking to get up to speed on your Performance Engineering initiatives, talk to us: firstname.lastname@example.org.