DevOps is a set of practices that combines software development and IT operations. It aims to shorten the systems development life cycle and provide continuous delivery with high software quality.
Life before DevOps
The business was a driver. They set all the requirements, there were constant plannings on how to finalize all the details of the software, and then it was pushed to the development team. Changes were hard to make.
It’s called a “waterfall” model when all the requirements are set beforehand and make the planning stage a lot larger. Later changes are not considered. There is only a single development team working on the feature and no other parallel work is done. After the development phase, testing is in the queue and if the tests are ok, the product will be released to the public. New feature requests are disabled by default after the planning phase. The software release lifecycle is too long and not flexible.
All the mentioned above led most teams to the monthly releases or even worse.
What about QA? Well, QA stuff also was struggling. Not being able to get a new build to test and to make it for every feature separately, instead, they were getting the whole build altogether with all the features developed and waiting to test.
Sometimes sysadmins were the bottlenecks. They have had to maintain all the server infrastructure for each service and each developer had more than the required knowledge of the systems to have kept the app compatible. From today’s perspective, this is kind of hard to maintain especially when the containers are on the market. The software was bound to the hardware and was not easy. Agility was lost.
In addition to the above statements having a staging environment before the release was a luxury. Maintaining another environment and syncing all the projects is time-consuming and error-prone.
The waterfall model by its nature tends to freeze feature branches for a long time and this cycle keeps going. Long-living branches mean big feature changes, merge conflicts, longer testing time, more bugs, hard rollbacks, and overall slow iterations.
Why DevOps matters
Agile way of doing things — that’s what DevOps is about, Development + Operations.
Automate processes, split them in a more maintainable size, and iterate.
- plan shorter/smaller features
- which leads to less code will be written
- less code means reduced chances where it can go wrong
- testing small chunks of the feature and continuous testing for each feature
- faster releases because short iterations and faster feedback loops
- monitoring and assessment is easier which leads to planning new features sooner
and the loop goes on and on, continuously.
It is all about the correct mindset and how we approach problems. Everything is a process and can be manipulated accordingly.
If we break a feature we can recover quickly — failing fast and the processes enable those benefits for us.
Containerisation is a process through which consistency across environments is maintained.
As a result, we gain our agility back again which then can be used to build better products at a faster pace.
CI / CD in Agile teams
Continuous Integration and Continuous Delivery is what makes DevOps a complete tool. Being able to monitor code checks, monitor the quality, and prevent merging low-quality PR-s is a huge advantage over other systems and processes. The team feels confident while maintaining code. Integration tests run always and ensure the project has no broken dependencies.
Continuous delivery activates the part when QA needs to take new builds and then push a product at a constant pace to the customers.
Mobile teams and mobile projects require solutions fit to them. Adapting mobile infrastructure means to understand the mobile software lifecycle and build specifics. Building various variants with a different environment, keeping artifacts, utilizing mobile tools, running tests in an emulator, managing multi-module builds and automated testing, and have all the above in a concurrent manner are the requirements for the mobile DevOps.
Imagine building different flavors of the application such as an app intended for the Google Play store and Huawei AppGallery and with different environments like prod/test (which connects to different API endpoints) and with different variants— debug/release.
- flavors (Google / Huawei)
- variants (prod/test)
in total, we have 2 ^3 = 8— number of variations to support.
Available solutions on the market
There are plenty of cloud solutions on the market and some of them are:
- Bitbucket Pipelines
- Travis CI
- and much more
At TBC Bank all mobile teams on both platforms rely on Bitrise. Easy workflow builders and plugins allow us to ship products reliably and effectively.