The article presents several ways of reducing application maintenance costs. Some of the ideas can really surprise you! We’ll also list some potential mistakes that can cost you hundreds of zlotys. Do you know how to make your app maintenance cost-efficient?
1. Who we are
At iteo, we have been creating software tailored to the individual needs and requirements of our consumers for over 10 years. We always pay significant attention to quality, modern technologies and both our clients and an app’s users satisfaction. That’s why we focus not only on visual aspects of our products but also on their speed of operation, high efficiency, global availability, and fault tolerance. Our additional goal is automating the implementation processes as much as possible and minimizing the infrastructure costs.
We recently had an opportunity to use our skills to develop an application for one of our business partners. We would like to share our experiences related to the process of producing and implementing this product.
2. What we’ve done
We faced the task of creating an application aimed at helping people suffering from Irritable Bowel Syndrome, also known as IBS. It has a number of features supporting the maintenance of a healthy balance between nutrition and physical activity.
Apart from usual adversities such as complex business logic, we had to face many other challenges. First of all, the client expected the app to be highly efficient, reliable, and smooth. We always value user’s convenience, so these assumptions were self-evident. Another crucial aspect was the ability to easily and quickly scale performance. The client planned to reach a growing group of users — first on the local market, and in time on a global scale. The entire project was co-financed by the European Union, so we meticulously approached the cost of maintaining our solution. It was necessary not only to precisely estimate the potential costs but also to choose the services and solutions within the project’s budget.
3. How we handled it
a. Why the cloud
To meet all of the above requirements, we considered various possibilities: on-premise solutions, Infrastructure as a Service (IaaS) and Platform as a Service (PaaS). Eventually, we’ve decided that PaaS will be the most optimal choice due to its easy implementation and maintenance. Cloud service providers equip us with machines with already installed environments and we don’t have to be bothered with their updates. What’s more, in most cases the service provider also gives us a Service Level Agreement (SLA) which usually exceeds 99,99%. Clients who haven’t used the cloud yet, often express concerns about access to their resources. Although we don’t have a physical contact with the server, administrative panels allow us to configure everything that’s needed for the service launch and proper performance. Some clients are also concerned about the price which is usually a bit higher then on-premise solutions or standard hostings. Nevertheless, when we include the costs of conservation and implementation, the offer seems quite competitive. What’s more, the cost of cloud solutions depends usually on their actual use and not the reserved power.
b. Why we chose Azure
The main players on today’s public cloud computing market are: AWS, Azure and GCP. Given that the software was developed in a .NET environment, the Microsoft Azure cloud was the natural choice. Microsoft takes care of their products’ close integration which makes the projects’ implementation much faster. Additionally, iteo programming team has practical experience and competences in the field of implementing business solutions on Azure confirmed by the Microsoft certification.
c. Services we used
The application was implemented in the PaaS approach using App Service. It makes the app management much easier, because we don’t have to worry about potential server failures. App Service offers a simple scalability, too. If the client wants to widen the application’s range, we can enlarge the server’s parameters to handle larger loads with only a few clicks.
All files, including the website’s graphics or documentation are kept in Azure Storage Account. It’s a perfect solution for these kinds of applications because it doesn’t require declaring and reserving particular space in advance. It allows storing smaller and larger amounts of data with no scalability. The solution’s biggest advantage is its price which depends only on the used disk space.
Another benefit is integration of the App Service with Azure DevOps that combines many functionalities adjusted to the development requirements, e.g. resource code repository. Azure’s administration panel allows us to launch the App Service with only a few clicks and implement a code from the DevOps repository.
One of the most interesting features of DevOps is Azure Pipelines. It lets us automate the processes connected with code compilation and optimization, as well as configure the app in the App Service. Thanks to Continuous Integration, we’re able to provide new versions much faster, reducing the risk of errors. Configuration prepared in a new format (YAML) is easy to modify and reusable. It allows a simple implementation of varied code versions in different environments.
We chose DaaS (Database as a Service) for a database. The Azure SQL service offers all functionalities needed at an unbeatable price. It’s also worth mentioning that Azure SQL doesn’t require expensive licences like SQL Server.
We used the Key Vault component for a safe confidential configuration elements storage. The service is almost free of charge and lets us store information such as passwords and access keys. We get an off-the-shelf encryption and a highly detailed access control of the data. We can also provide other Azure resources with access to this information, creating a central place for configuration storage. If we’ll need to replace the access key in the future, we can do it very quickly. What’s more, we can be sure that it’s been replaced in the configuration of all resources that need it.
To simplify and lower the costs of the app’s maintenance, we integrated it with the Application Insights service. It allows collecting logs and diagnostic data both from the App Service and other Azure resources. It has a wide range of features that enable easier problem diagnosis in the app’s performance, e.g. long processing time or a problem in communication with an integrated external system. We could once again experience how wonderfully Microsoft products cooperate. The .NET environment offers readymade suites which can be seamlessly integrated with the source code. They allow gathering diagnosis information about the application’s performance, e.g. the time executing requests. Application Insights can be also integrated with the App Service which makes it easier to monitor the load and find the best time to carry out service work.
We used Terraform to manage the infrastructure. It’s an Infrastructure as Code (IaC) solution that simplifies the processes related to creating and controlling the deployment environments. It helped us create short scripts which can be used to build new, separate environments or remove them in only a few minutes. The Terraform configuration, so called “state”, is also saved in Azure Storage Account which allows the deployment team to work on the infrastructure at the same time.
d. How it works
Prepared architecture allowed us to launch the app, that can handle both a small and a large traffic, at a low cost. The majority of the deployment process has been automated which enables us to provide new updates and features quickly and easily, not worrying about potential errors during installation. All of the resources are stored in the Microsoft Azure cloud, so the communication between them is fast and efficient. What’s more, the app has one, central place for configuring all services, and the settlements add up to a single invoice from one provider.
4. Summing up
Recently, the application has had its premiere and is now available for clients. It has some good reviews and constantly increases its group of users. In addition, the platform has great prospects for development, and thanks to the architecture based on Azure services, we will be able to quickly adapt it to new changes.