Application performance issues, or why your software needs to be ready for everything

Imagine your company has invested in dedicated software. You have spent a lot of time and money on creating a system tailored to your needs. The partner Software House made efforts to implement the necessary functionalities, thanks to which the solution was to be a panacea for company problems. And although the effect is indeed well-matched, in use the application can be… unreliable. Issues arise with increased user traffic. In practice, this means that, for example, you invest in a large advertising campaign, and the system (due to overload) stops working at a crucial moment. As a result, you are left with a theoretically good solution, but one which in reality slows down or inhibits your company’s work. 

Have you already guessed where Software House made a mistake? 

What is application performance, and why do we need performance tests?

Let’s do a short test. Take a moment to answer the question: what should custom software be like? At first, we most often think about functionalities. After all, we are creating a personalised solution so that it works as we have planned. Later, topics related to security, integration, ease of use, etc. come to mind. We rarely think about performance at the beginning (in the design phase). We are used to the fact that nowadays everything works quickly and reliably. In an era of advanced computers and good Internet, we often forget that something can work slowly and be unstable. 

Meanwhile, software performance problems are not uncommon at all and are one of the main design risks. For the application to work reliably, all threats that may reduce its performance in the future should be mitigated at the beginning of the software development process. 

Quote from Google's report about performance and user experiance dependency

Software performance is the amount of work it can do in a given time. The more work the software does in a given period, the greater its productivity. When creating and developing an application, it should be remembered that each change may reduce the performance, and thus the efficiency, of the system. For this reason, we mustn’t forget regular performance tests that will verify:  

  • Speed and response time of the created solution; 
  • System stability and reliability; 
  • Scalability and resource utilisation according to the application load. 

Almost any system will run smoothly when 5 people are using it. But what if it suddenly has to handle several thousand users? How will it endure sudden load peaks or work under increased loads for long periods? To avoid unpleasant surprises, we must be aware of whether the system has performance bottlenecks that may hurt the work and image of our business in the future. 

On the other hand, knowing the limitations — because each system has its performance limit, where scaling does not help anymore — will help you make informed business decisions. 

What do system performance issues lead to?

  • Reduced income. If your system is not working efficiently, employees perform tasks slower and customers are more tempted to stop using the service (if you work in e-commerce, this is especially important); 
  • Fewer chances of acquiring new customers (e-commerce again!); 
  • Perception of your business as outdated and without potential. Customers would rather not cooperate with businesses that seem delayed at the very beginning, and employees are increasingly often choosing technologically developed companies; 
  • Downtime and lack of access to services. This has a negative impact not only on income but also on the company’s image. In the banking and insurance industry, downtime can even lead to a serious drop in customer confidence; 
  • No recommendation service. It has been known for a long time that new clients often come from recommendations. If those present are not satisfied with the application, they will not recommend your services any further; 
  • More expensive software development. Inefficient applications require more work (testers and developers). And if we don’t focus on systematic performance testing from the outset, we will face expensive repairs in making the application work more efficiently. 

How to avoid software performance problems?

The first step is to clearly define and present the actual goals (and not the managers’ aspirations) related to the performance of the solution being created. Remember that we always formulate these from the perspective of the end-user and take into account the need for software scalability in the future. 

Another basis is performance tests, which must, among others: 

  • Simulate production behaviour (load simulation must correspond to the load that we anticipate in production); 
  • Test data that match production data; 
  • Include the most resource-consuming functionalities as well as processes critical to system performance; 
  • Test the software at various load levels and in various test scenarios; 
  • Be performed regularly (preferably perform several rounds of testing to ensure consistent results). 

During the development of the application and the release of subsequent versions, you should always compare response times and system performance to previous releases. The results of the performance tests are the basis for making decisions about the solution architecture and its further development. 

Cloud and system performance: 

If you have problems with software performance (or it is difficult for you to predict under what load the system will work), take a look at the possibilities of cloud computing. Its potentially unlimited resources allow you to scale your application exactly the way your business needs. Moving or building an application in the cloud ensures speed, scalability and availability of the solution at a level that is difficult to achieve on-site. Remember that you can also transfer your test environment to the cloud! 

Why do Software Houses forget about performance tests?

It is not a question of bad memory, but rather of a lack of reliability or awareness. Performance testing cannot be done manually. This requires special software, as well as people with the appropriate technical competence and experience in test automation. 

Due to the lack of experience and relatively low awareness of software performance, performance tests are carried out only on the finished system. And, as we have written in one of our previous articles, the later a bug is found (in this case a problem that causes a drop in performance), the longer and more expensive the repair is. Thus, performance testing should be automated and become an integral part of the CI/CD process. Without this element, we will never be able to fully say how the application will behave in the production environment.