Ensuring Optimal Software Performance: 5 Key Strategies

by Yiwen Zhang, Vice President, Software Development, Auvenir

Often, a software product is tested in lower environments and is signed off by QA and the product team on the feature functionalities before going to performance testing. When it comes to performance testing, it is often found that the user experience is not as expected, and sometimes even the function cannot work properly. As a result, a significant amount of time is spent on performance tuning after feature development. Sometimes it requires a redesign and rework. Potentially, as a result, it can slow down the product’s release to the market.


If you want to avoid these scenarios from occurring, here are five tips that will help you develop a product with performance at the forefront.


  1. Define the performance load model

Some products can have seasonal peak usage, and some may not. Some products may have users across all time zone regions, and some may have users concentrating on certain peak hours. Some business operations are required daily, but others may not be frequent. Understanding the nature of the product and user behaviours is critical for defining a realistic performance load model.


  1. Understand production data characteristics

After the product goes live, we can use predefined queries to retrieve production data and analyze the characteristics of the production data. It will help refine the performance measurement to be close to real users’ data patterns.


  1. Take performance into consideration during the architecture and design phases

During the architecture and design phase, we always need to ask two questions:


  1. How much data is required to be presented to users at a time?
  2. How intensive is the response time of a business transaction for users?


The answer to the first question will help us limit the amount of data about individual business transactions. The answer to the second question will help us identify which backend technology should be used to process the transaction. If the response time is not critical to users, we can choose asynchronous backend processes such as Azure functions. If the response time is critical to users, we need to consider breaking one big transaction into smaller transactions and using synchronous API calls. From a UX design perspective, when we need to deal with a large amount of data in the UI, we need to consider limiting the data size available for users at a time by introducing filtering and searching capabilities, pagination, and enhancing the user experience with progress bars, lazy loading, etc.


  1. Implement system limitations

To prevent system crashes and operation failures due to unexpected loads in the production environment, we should always implement system limitations when we build new features. For example, when we implement an Azure function to support a long-running backend process, we need to set a limit to control the number of concurrent processes that can be processed by the Azure function at the same time. The limit will be defined based on the performance load model that the product team defines. In this case, having a limit will also help to control the cost of resource consumption with cloud vendors.


  1. Build a performance team and incorporate performance aspects into the development process

Build a performance team that can focus on performance improvements across the product development life cycle. This team will be responsible for defining performance development guidelines according to best practices, analyzing the root causes of historical performance issues, identifying solutions for performance improvements, and providing knowledge transfer sessions to the feature development team. Introduce a performance checklist in the PR (Pull Request) approval process. The performance team will conduct the code review according to the checklist to ensure the coding is following the performance guidelines.


Final thoughts

Nowadays, product performance is an area of increasing importance. With newly evolved technologies, cloud solution providers make horizontal or vertical scaling a lot easier. However, scaling will not always work to overcome performance problems. Even if it can, it will become very expensive at some point. To ensure we do not hit performance obstacles at the end of the development life cycle and avoid a pitfall when the product goes live, we need to understand the performance requirement from the business first, consider performance during the architecture and design phases, and implement it through the development life cycle.


Yiwen Zhang has more than 20 years of experience in software engineering. A proven leader in design and delivery of large-scale, high-availability software systems and public cloud solutions. In her current role as VP of software development at Auvenir, she manages a large engineering team through all facets of end-to-end software development to build both commercial and enterprise software products.

LinkedIn Profile