en flag +1 214 306 68 37

DevOps Implementation: Where to Start And How to Make It Result in Success?

Last updated:

Editor’s note: Andy explains the advantages of DevOps and common misconceptions about the methodology. He also presents a step-by-step plan for DevOps implementation. If you need a DevOps adoption roadmap tailored to your business needs or a team of experts to entrust your DevOps, feel free to contact us for DevOps outsourcing services.

A Typical Pre-DevOps Situation

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.

DevOps impelementation guide

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.

Pre-DevOps cituation

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.

DevOps Implementation Roadmap

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’s a step-by-step overview of how to implement DevOps.

DevOps roadmap

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 for the entire company in the least painful way. CIO, in his turn, is able to arrange financial investments and human resources in the most optimal way. CIO also appoints a program manager that takes responsibility for designing the DevOps implementation strategy and overseeing its execution.

2. Building the DevOps strategy

A program manager starts by assessing the current state of development and operations to gain a clear understanding of how to set up the DevOps environment. This includes reviewing how code moves from development to production, identifying manual processes, overviewing tools that are in use, identifying possible challenges like skill gaps, and evaluating collaboration between teams.

Based on this preliminary research, the program manager can define measurable goals for the DevOps implementation, such as reducing deployment time and deployment errors, increasing test automation, and enabling more frequent releases. Then, the manager establishes key DevOps practices to implement, for instance:

  • DevOps culture. Organize a DevOps environment that promotes transparent and blameless cross-team communication and collaboration, making all the members understand each other’s motives and duties and focus on the common goal – to accelerate a software development cycle and ensure the high quality of software.
  • Infrastructure as code (IaC). 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 the build’s 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.
  • Continuous integration and delivery (CI/CD). CI/CD automates the testing, merging, building, and deployment of code changes. Automating the software development-testing-releasing cycle makes software delivery faster and more reliable.

The manager builds a roadmap with a defined approach and tools to implement the chosen DevOps practices and reach the set goals. Then, the manager prioritizes steps of the initiatives based on impact and feasibility and sets realistic timelines for implementing each step. Additionally, the manager provides recommendations to CIO on assigning the responsibilities to team members (e.g., DevOps engineers handling CI/CD pipeline maintenance, QA team leading automated testing setup) and helps CIO plan additional training on the required DevOps tools and processes for employees.

3. Implementing containerization

Containerization ensures that software runs reliably 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. By isolating the applications from the underlying infrastructure, containers allow for the stable running of applications regardless of the differences in the deployment environments.

Moreover, since the pieces of each 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

Infrastructure automation tools, including CI/CD tools, accelerate software deployment. In one of our projects, CI/CD pipelines ensured a smooth introduction of code changes as frequent as 100 commits a day.

Another case for automation is server management — by automating and orchestrating server management we ensured reliable servers requiring minimal manual interference.

Automated configuration management and CI/CD can and should be applied to containers as well. For example, Kubernetes — for large infrastructures — or Ansible — for smaller ones — allows managing containers for fault tolerance, monitoring their health, and rolling software updates, while Jenkins is used to create, test, and deploy new builds into Kubernetes.

5. Increasing the amount of test automation and aligning QA with development

Automated testing helps achieve faster delivery with DevOps. However, not every testing type must be automated. For instance, test engineers should still perform exploratory, usability, and security testing manually. Depending on the efforts needed to write automated tests, functional testing may partially remain manual.

Combining development with testing activities helps 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 our experience, continuous integration (CI) and test automation allows running hundreds of testing scenarios 2–4 times a day. In case defects are found, developers work on stabilizing software before releasing the next build.

6. Ensuring comprehensive 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 helps detect, prioritize and isolate application defects before end users find them. It also makes it easier to find the root causes of the errors quickly.

DevOps Tools and Technologies

Category Tools
Containerization tools Docker, OpenVZ, Kubernetes, Apache Mesos, Red Hat, OpenShift, Podman, Docker Swarm, LXC (Linux Containers), Container Registry,Amazon ECR
Infrastructure automation tools Ansible, Puppet, Chef, HashiCorp Terraform, HashiCorp Packer, Pulumi, AWS CloudFormation, Azure Resource Manager
CI/CD tools GitLab CI/CD, Jenkins, GoCD, Bamboo, CloudBees, CodeShip, TeamCity, Travis CI, Cloud Foundry, CircleCI, Cloud Build, Drone CI, Argo CD, Werf, Artifact Registry, Azure DevOps, AWS CodeBuild, AWS CodeDeploy, AWS CodePipeline, AWS CodeCommit, AWS CodeArtifact
Test automation tools Selenium, Appium, Protractor, fMBT (free Model-Based Testing), XCTest, CUIT (Coded UI Test), Ranorex Studio, Postman, Zephyr, Tricentis, Apache JMeter, HP QuickTest, Professional, Unified Functional Testing, LoadRunner, Warp, Tsung
Monitoring tools Zabbix, Nagios, Prometheus, Elastic Stack, Grafana, Datadog, Fluentd, Logstash, Kibana, Graylog, syslog-ng
Coding & scripting Bash, PowerShell, Python, Golang, YAML, Perl, HashiCorp Configuration Language

Benefits You Can Expect From DevOps

To overcome the drawbacks of a traditional way to develop software and carry out IT operations, we suggest considering the DevOps approach.

With the help of a range of new practices and technologies we describe in the article, businesses implementing DevOps can develop and deliver stable applications with thoroughly tested functionality 24–42% faster than organizations sticking to the traditional approach to software development and operations.

DevOps implementation benefits

Efficient team collaboration

The implementation of the DevOps approach presupposes that developers, QA engineers and system administrators now work in tandem. DevOps fosters close collaboration between the teams engaged in software development, allows preparing and delivering new software pieces to production faster, and improves team productivity by over 40%.

Reduced failure rate

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.

Rapid deployment and greater flexibility

The IaC approach allows DevOps engineers to quickly replicate, modify, and scale infrastructure up and down for development, testing, and production. As the infrastructure exists as ready-made code, when developers need a new infrastructure for a new project, they don’t have to wait for system administrators to provide it for them.

Early bug detection and shortened release cycles

Continuous testing is one of the key components of the DevOps approach. Specialized tools like Selenium, Zephyr, and Tricentis automatically perform various types of tests (such as unit, functional, integration testing) by running quality assurance (QA) scripts at all stages of production. If automated tests fail, the tools promptly notify the DevOps practitioners on detected bugs. With less human intervention needed on every stage, developers can quickly get much needed feedback and release cycles can be significantly shortened.

Enhanced reliability of application updates

Thanks to close collaboration between the DevOps-related teams and implementing application release automation (ARA), software is updated faster with a change failure rate being as low as 5%. ARA allows the teams to accelerate the process of deploying new builds with minimal downtime and fewer configuration errors compared to manual implementation. If a critical error slips into production and the deployment fails, DevOps practices can help reduce the recovery time to one hour or less.

Improved infrastructure stability

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.

Increased user trust

Involving business users in defining the tests to be automated (including acceptance tests) helps to ensure sufficient testing coverage for the software functions that are the most critical for them and in general builds business users’ confidence in the application. Thus, there is no need for business users to carry out manual acceptance tests afterwards, which reduces the overall lead time.

Additionally, since DevOps adoption improves software quality, customer satisfaction can increase by 45%.

What Not to Expect From DevOps

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.

Summing Up: to Switch or Not to Switch

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.