Why CI/CD is a must-have in your software project
How many times did your QA team wait for the delivery of the latest build to test it, which means a delay in testing → delay in fixing bugs → delay in releasing? Let's say your developer needs around 1h to deploy Android and iOS builds to the testers. If the app is released every two weeks, that means it’s 2h per month. What about delivering the app to the testers? Let's say there are 5 builds before the final one, the total cost of one release is 6h and 12h per month.
What if I told you, you can reduce this cost to zero by deploying the app to the testers every day?
What is CI/CD?
CI/CD is a way of frequently delivering apps to users by automation of mobile app development. CI/CD are continuous integration, continuous delivery, and continuous deployment. That means every time the developer pushes the code to the repository, the CI/CD runs scripts which deliver a new build to the testers and users.
Continuous Integration is the practice of integrating code changes from developers into a shared repository, several times a day. Each code change is verified by an automated build, allowing teams to detect problems early and fix them quickly.
After adding the code to the repository, the CI system runs automated unit and integration tests and checks if the new code hasn't broken existing functionality.
If the tests are successful, the new code is integrated with the existing source code. If not, the developer is notified about it and must fix the errors.
Continuous Deployment involves automating the process of releasing applications. Due to it, new versions are released as quickly as possible after going through the integration and testing process. With this solution, the development team can quickly share a new functionality with users. After the code is successfully integrated into the repository, the Continuous Deployment system automatically deploys the new version of the application to production.
Continuous Delivery is a software release automation process, which enables faster deployment of changes to the production. Here we have control over the release process because Continuous Delivery is a partly manual process. This allows the team to deliver new features to users by simply clicking a button. This is useful for large applications where thorough testing is necessary before releasing it to users.
Benefits that come along with CI/CD
Improved code quality
The Continuous Integration process allows the running of automated tests, enabling faster detection and correction of errors.
Improved user and customers satisfaction
Manual builds and testing can significantly delay the process of releasing a new version of the application by, for example, correcting minor errors several times. The use of automated processes would avoid such problems, and the faster release of new versions of the application would affect the satisfaction of our customers.
Frequent improvement of the application also contributes to the satisfaction of the app users.
Reduced cost of development
As we mentioned before, the automatization process of deploying the app can save money and time. Based on our experience and research, for a long-term project, it’s ~108h saved yearly on deploying the app. Let’s do some quick maths.
In the introduction to this article, for simplicity's sake, we stated that deployment takes one hour. In reality, it takes around 45 minutes per deployment, although, of course, it all depends on the device’s performance and many other variables.
Most often, applications are released to production every two weeks. On average, five deployments go to the tester per release process and one deployment goes to the production (App Store/Google Play). From this, it follows that the cost per release is 4.5 hours, so 9 hours per month and as much as 108 hours per year.
What is more, developers can set up webhooks when something goes wrong with the build. This can be for example a notification via Slack. This way, you will instantly know if there is a bug in the code or if something does not work correctly.
Reduced risk of bugs
As you can see from the infographic, the traditional way of developing software takes a lot of time before the QA team can test the application. CI/CD tool solves that problem.
With CI/CD, the QA team can test much more often, so bugs are detected at an early stage. What is more, if the project contains unit tests, CI/CD can run all tests for the application. With this tool, the quality of the product might be hugely increased and that is one of the biggest benefits of CI/CD.
Measurable state of development
A bunch of tools support the CI/CD process by providing you with a lot of metrics, like build time and test coverage. That can also show you areas that need improvements like decreasing test coverage or high bugs rate. That tool can give a wide look at the entire software development process which is another great advantage of CI/CD.
What are the best CI/CD tools for your software development process?
Choosing the best solution for your organization will depend on your needs, technological resources and budget. The market offers many CI/CD tools, some are free and some are chargeable.
We have prepared a set of 3 tools that have proven to be noteworthy:
A system that offers a user-friendly interface, focusing on visual solutions and having a graphical editor without the need to write code.
If your team is working on a smaller project, the implementation of Bitrise will be a very good idea because its integration does not take much time and it is easy to use.
This tool is equipped with many integrations with systems for developing mobile applications, therefore it can be a good choice for mobile projects (e.g. iOS or Android apps).
Bitrise works in the cloud, so we can use it from anywhere in the world only with access to the Internet.
It offers free plans for individuals and small teams, as well as paid plans for larger teams, and additional features.
A tool that can be used for more complex and demanding projects.
We can run it on a local machine or in the cloud using services such as Amazon Web Services, Microsoft Azure or Google Cloud Platform.
It is available as an open source (based on the MIT license), so it is free to use.
Jenkins is based on Java, so you can use it for applications that run on the JVM (Java virtual machine), it is very flexible and can be customized with scripts and configuration files.
A universal tool, supporting various platforms, including desktop. Provides the ability to easily scale tasks using multiple virtual machines simultaneously. Has an easy-to-use graphical interface.
CircleCI is a great tool for users who want to have as much influence on the configuration of CI/CD processes as possible. It requires manual configuration using YAML files.
It is a good choice for both smaller projects and more extensive ones.
Looking at the short term, it may seem to us that the implementation of CI/CD is time-consuming and unnecessary in the long run, but looking at it in the long term, you will be able to notice a huge amount of saved time. It saves money and reduces necessary work on the deployment process. Also, the project will be more organized and professional.