Despite a large amount of info on DevOps, there’s still a lack of details on concrete steps to take to start DevOps implementation and make it successful to speed up software development and operations.
In this article, relying on our expertise in DevOps practices, we define the reasons to start DevOps, consider its value and further show how the DevOps implementation plan can be realized.
We describe the common conditions, in which companies develop their software and conduct IT operations. These conditions may be far from infallible, and the flaws in them may determine the companies' decision to shift to DevOps as a way to improve their software development process and IT operations.
In-house, outsourced, or partially outsourced software development
Traditionally, there are three main options to organize software development:
1. Software is developed by a company’s in-house team with a good deal of financial and human resources dedicated to the development process.
2. Software development is outsourced to a third party, in case there’s a lack of IT resources for development.
3. Software development is conducted with in-house efforts but, for instance, quality assurance (QA) is delegated to a third-party QA services provider due to the gap in QA competencies in a company.
Strict segregation of duties between the departments involved in development
Development, testing and QA, infrastructure provisioning and modernization are within the responsibilities of three different departments. Correspondingly, developers write code, software test engineers inspect the application for bugs, the operations team manages the production environment and ensures stable application performance. The duties of the departments are strictly segregated and the collaboration between them is weak. Security administrators represent one more independent department that is often perceived as a ‘roadblock’ in the software development cycle, since their efforts to detect security weaknesses in the application (and developers’ efforts to fix them further) lead to the project’s prolongation.
Insufficient coverage by tests
Developers write unit tests to individually check the functioning of each smallest testable software part early in the development stage. As unit testing implies verifying software units independently, integration errors or software performance issues may go unnoticed. To check the interconnection between application components, as well as the overall application functioning, software test engineers carry out manual and automated testing via UI. However, the rate of test automation is not high enough to cover even critical functionality.
High probability of post-release errors
Test engineers conduct functional, performance, integration, security, usability, and other types of testing. However, continuous testing is not implemented at each stage of the software development process. Due to the resulting testing gaps, software users often detect severe post-release bugs. Further, test engineers may not be able to reproduce the identified defects in the testing environment. This may happen because of the differences in:
- Configurations of testing and production environments.
- Build versions deployed in production and in testing environment.
Lack of users’ trust in software quality
Due to severe post-release errors, business users are not sure of software quality and have to conduct thorough manual acceptance testing. And because potential users are busy with their main responsibilities, their feedback comes with considerable delays.
Weeks for updates and fixes
As the collaboration between the teams involved in the software development process is not efficient enough, it generally takes 2-4 weeks to detect and fix bugs or implement and release minor changes in the software. Such a long waiting period is especially harmful when software under development is supposed to support or transform critical business operations, for instance, if it is a supply chain management application or a CRM software.
Time-consuming deployment of the infrastructure
System administrators spend days or even weeks to prepare a new development, testing and production infrastructure for a new project. Misconfigurations often occur due to the manual nature of infrastructure preparation. Modifications and tuning take even more time.
To overcome the drawbacks of a traditional way to develop software and carry out IT operations, we suggest considering the DevOps approach.
Due to a range of new practices and technologies we describe further in the article, businesses implementing DevOps can develop and deliver stable applications with thoroughly tested functionality faster than organizations sticking to the traditional approach to software development and operations. We accumulated our DevOps-related experience to provide you with a list of the key advantages DevOps brings.
Constant communication between the teams engaged in software development
The implementation of the DevOps approach presupposes that developers, QA engineers and system administrators now work in the alignment with each other. The ongoing communication between the DevOps practitioners allows preparing and delivering new software pieces to production faster and with a decreased number of bugs missed.
Fewer software failures caused by the differences in infrastructure configurations
With DevOps, it’s possible to create identical working environments for development, testing and IT operations teams. It becomes achievable when infrastructure as code (IaC) is applied. A DevOps engineer can create a new development or testing environment aligned with the production environment. After that, developers and test engineers can work with new builds being sure that the created development and testing environments are completely identical to the production.
As a result, there will be no situations when software works properly in the testing environment but fails on production.
Fast provision of new infrastructure
To quickly prepare and deliver new infrastructure for development, testing and production, DevOps engineers apply the IaC approach. As the infrastructure exists as ready-made code, any time developers need a new infrastructure for a new project, they don’t have to wait before system administrators provide them with it.
The increased amount of test automation
Continuous testing is one of the key components of the DevOps approach. To achieve it, testing is automated with the use of specialized tools, e.g., Selenium, Zephyr, and Tricentis Tosca that are designed to automatically perform various types of tests (such as unit, functional, integration testing) and promptly notify the DevOps practitioners on detected bugs.
Quick and reliable delivery of application updates
Thanks to close collaboration between the DevOps-related teams and implementing application release automation (ARA), software is updated faster than in the traditional process of software development. ARA allows accelerating the process of deploying new builds with the minimal downtime and fewer configuration errors usually occurring when the deployment of new build is carried out manually.
Fewer post-release errors
With the implementation of continuous testing and the alignment of testing and production environments, the QA team spends much less time on QA and testing activities and misses fewer bugs.
Improved users’ trust
Within the DevOps approach, the rate of test automation increases while the number of post-release errors declines. To convince business users of high software quality, it’s important to establish strong communication with them. Business users can be involved in defining the tests to be automated (including acceptance tests as well) to ensure sufficient testing coverage for the software functions that are the most critical for them. Since business users know that software functionality is tested thoroughly, their confidence in the application quality rises. Thus, they lose the need to carry out their own manual acceptance tests afterwards, which reduces the overall lead time.
While the DevOps popularity rises, the number of misconceptions surrounding this approach increases. Before starting the shift to DevOps within your company, it’s better to make sure you have the correct vision of the DevOps nature.
- Automation does not equal DevOps. The key components of DevOps are IT specialists engaged in building the new DevOps culture as well as the processes arranged within this approach. Automation is a key instrument to foster software building and testing that helps increase the release speed while avoiding human errors.
- The adoption of DevOps tools is not enough to implement the DevOps approach. New practices must be adopted as well. There’s a wide range of tools needed to make DevOps implementation efficient, like Ansible, Selenium, Docker, Kubernetes, Octopus, and others. However, besides learning how to use and configure these tools, all the members of a DevOps project need to adopt continuous testing, as well as continuous integration and continuous delivery (CI/CD) practices to accelerate software delivery and increase its quality.
- There’s no need to redesign the organizational structure to switch to DevOps. No separate department is needed to implement the DevOps approach. Train the existing development, testing, support, operations and other teams involved in software development so that they can properly configure the tools for infrastructure management, application performance monitoring, etc., as well as apply new practices like CI/CD.
Once you have considered all the factors and decided to implement DevOps within your company, you need a step-by-step plan to smoothly shift from traditional software development to the DevOps approach. Here, we outline the key steps.
1. Organizing a DevOps initiative
A company’s CIO organizes a DevOps initiative as a part of the IT department program. Thus, the IT department gets an opportunity to make changes in the development and operations activities the least painfully for the entire company. CIO, in his turn, is able to arrange financial investments, human resources in the most optimal way. A program manager becomes responsible for designing the DevOps strategy and monitoring its implementation.
2. Building the DevOps strategy
To draw up an effective DevOps strategy, a program manager should utilize best practices that will improve the interdepartmental collaboration and enable the new ways of infrastructure provisioning, software development and testing. Among the most important practices are the following:
- Put the company’s development, testing, design, operations and other teams in a shared working DevOps environment, making all the members focus on the outcomes of the software development cycle and understand each other’s motives and duties. Set the common goal – to accelerate a software development cycle and ensure the high quality of software – for everyone involved in software development and operations.
- Implement IaC to ensure the prompt provision of the IT infrastructure upon developers’ or test engineers’ requests, whenever they need it for creating a new build or checking its quality. This will allow DevOps practitioners to get new infrastructure for development or testing in one click, as well as avoid human errors that often result from the manual configuration of IT infrastructures.
- Automate software building, unit testing, application testing via UI, software integrating, deploying, and releasing processes to speed up the software development-testing-releasing cycle.
Containerization implemented with such tool as Docker solves the problem with the reliability of software, for example, when it travels from the development to the testing environment and then to production. Containers include everything required to run an application, i.e. all the dependencies, libraries, configuration files. The isolation of the containerized parts of the software from the overall IT infrastructure allows for their stable running regardless of the differences in the environments they are put in.
Moreover, since the pieces of application (its database, front end, etc.) are put into several containers, it is easier for an operations team to manage the application, since they have no need to rebuild the entire software when the changes are required in one of its microservices.
4. Integrating infrastructure automation with CI/CD tools
When software is put into containers, the containerized application needs to be managed properly. Such infrastructure automation tools as Kubernetes, Ansible, Chef, or Puppet are integrated with CI/CD tools like Jenkins, Bamboo, or GoCD for more efficient configuration management and software deployment.
For example, Kubernetes – for large infrastructures – or Ansible – for smaller ones – allows managing containers for fault tolerance, monitoring their health and rolling software updates, and Jenkins is used to create, test and deploy new builds into Kubernetes.
5. Increasing the amount of test automation and aligning QA with development
To achieve faster delivery with DevOps, sufficient automated testing must be ensured. However, not each testing type must be automated. For instance, exploratory, usability, and security testing should still be performed manually. Depending on the efforts needed to write automated tests, functional testing may partially remain manual.
The development and testing activities are carried out in tandem to avoid post-release bugs. While the application is still in development, the best practice is to conduct automated tests 1-2 times a day. In case defects are found, developers work on stabilizing software before releasing the next build.
6. Ensuring total application performance monitoring
Application performance monitoring provides the DevOps-related teams with transparency over all the performance issues, e.g., slow response, memory leaks, runtime errors. The issues may be revealed during application server monitoring, user experience monitoring, etc.
Application performance monitoring allows detecting, prioritizing and isolating application defects before end users find them, as well as finding the root causes of the errors quickly with the use of special application monitoring software, such as Zabbix, Nagios, or Prometheus customized for monitoring a particular application.
Before you decide to implement DevOps, we suggest considering all the time, organizational efforts, as well as new technologies you’ll need for the DevOps initiative to be successful. The most tangible benefit DevOps will bring is delivering software more rapidly without compromising on quality.
To achieve this benefit, you’ll need to transform both software development process and IT infrastructure arrangement. DevOps helps to make your IT infrastructure reliable – due to the strong collaboration between the DevOps-related teams and the alignment between the development, testing, and production environments – and flexible – thanks to the adoption of DevOps practices like CI/CD, IaC, testing automation, total application monitoring and others.
Want to speed up your software delivery cycle and improve software reliability avoiding heavy expenses? Our DevOps consultants will help to implement the DevOps approach.