How to implement DevOps: mindset, practices, and step-by-step implementation plan
Tags: devops, programming, productivity
Published: 2021-04-19 12:50:07

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzj5lq48j942bvpcjdjx.jpeg)

<p><span data-preserver-spaces="true">People, processes, and tools are the three foundational pillars of DevOps &mdash; the term coined by Patrick Debois in 2009 to describe a new culture of collaboration and shared ownership in software development. With DevOps adoption, software is developed and delivered in short cycles supported by automation and tools.&nbsp;</span></p>
<p><span data-preserver-spaces="true">But&nbsp;</span><a class="editor-rtfLink" href="https://itrexgroup.com/services/devops/" target="_blank" rel="noopener"><span data-preserver-spaces="true">DevOps implementation</span></a><span data-preserver-spaces="true">&nbsp;is not all hard stuff. According to Patrick Debois, DevOps is more&nbsp;</span><em><span data-preserver-spaces="true">a human problem</span></em><span data-preserver-spaces="true">. Or, as Viktor Farcic put it in his book The DevOps Paradox, it's&nbsp;</span><em><span data-preserver-spaces="true">a people game</span></em><span data-preserver-spaces="true">&nbsp;at its roots. In the old pre-DevOps days, developers would only tell the operations team after completing a piece they have been working on for months, "Here's version 2.0. Make it run." And Ops would run it to find out that everything has crashed. Finger-pointing was also commonplace.&nbsp;</span></p>
<p><span data-preserver-spaces="true">DevOps processes, however, invite everyone to the party, making teams assume collective responsibility for user experience with new software. In the world of DevOps, Ops engineers are saying, "Fine, we get it, we should ship this piece tomorrow, we'll figure out how to meet the deadline." And Dev people are saying, "We don't want to be messaged in the middle of the night that something has gone terribly wrong, so we will help ship it safely."</span></p>
<p><span data-preserver-spaces="true">In the DevOps environment, everyone is working together toward the same goal &mdash; building better quality software faster. With no blame game. Everyone means people from product owners, developers, testers, and IT operations to even marketing and sales that bring customer feedback to the table. An important thing to know is, you don't set up a DevOps department between Dev and Ops to implement DevOps. This way, you can get only a third silo. Instead, you change the culture of Dev and Ops to break down the walls between them.</span></p>
<h2><span data-preserver-spaces="true">What is exactly the DevOps mindset?</span></h2>
<p><span data-preserver-spaces="true">DevOps implementation above all means a cultural shift. Because DevOps is mostly about&nbsp;</span><em><span data-preserver-spaces="true">soft stuff</span></em><span data-preserver-spaces="true">:&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Empathy and collaboration</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">Empathy, meaning the ability to think about things from another's perspective, is believed by many to be the true DNA of DevOps. It allows Ops people to understand the importance of quick releases, while developers can better appreciate problems caused by bad code. Plus, both parties are putting users at the center of everything they are doing. Empathy powers collaboration. Collaboration powers productivity, encouraging everyone to commit to software development quality and speed.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Mutual responsibility</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">DevOps implementation involves setting up small cross-functional groups who will work autonomously, taking mutual responsibility for continuous delivery. Loosely coupled product-centered teams, consisting of developers, operations engineers, testers, and project managers, enable microservices style, reducing the number of handoffs along the value stream &mdash; from version control to production deployment. However, individually, developers are still responsible for a piece of code they've written. "</span><em><span data-preserver-spaces="true">You build it, you run it</span></em><span data-preserver-spaces="true">," Amazon CTO Werner Vogels once famously said.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Knowledge sharing</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">Scrum standup meetings and retrospectives allow teams to understand what was done yesterday, what was successful, and what can be improved. In a knowledge-sharing environment, DevOps engineers learn new things and grow continuously, adjusting their competencies. At a bare minimum, everyone on the team should have on-demand access to source code, logs, tools, test servers, production builds, and postmortem reports.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Continual experimentation</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">DevOps is hypothesis-driven development. Failing fast to learn faster through a tighter feedback loop is key to DevOps implementation. DevOps teams write code in small batches and push it to production as quickly as possible. This way, they have an immediate chance to put the solution right by fixing defects swiftly or removing a certain feature altogether. As The DevOps Handbook co-author Jez Humble said, "</span><em><span data-preserver-spaces="true">Users don't know what they want. Users know what they don't want once you've built it for them.</span></em><span data-preserver-spaces="true">" So, the DevOps mindset is about starting with intuition and learning lessons as you move forward to arrive at a data-driven decision.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Customer centricity</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">The DevOps culture relies on a product-first approach that cares about the needs of real users. DevOps teams should understand what they build and understand the people for whom they build. Continuous feedback is crucial. This often means that (i) Ops take part in developing service-level agreements with users to understand user requirements, (ii) developers heed to end-user requests with fast updates, leveraging a loosely coupled, service-oriented architecture that allows utmost flexibility, and (iii) testers set up user focus groups for a controlled UAT, interacting with users directly.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Automation</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">A very strong emphasis in building DevOps is put on automation that reduces human error and amplifies speed, cutting overhead costs. Automation in DevOps processes is extended virtually to everything, from development and testing to infrastructure provisioning, configurations, network tasks, databases, deployment, and monitoring. Netflix is known as a fantastic example for DevOps implementation, with its fully automated deployment processes allowing engineers to run code thousands of times per day.</span></p>
<h2><span data-preserver-spaces="true">Why to implement DevOps</span></h2>
<p><span data-preserver-spaces="true">According to the&nbsp;</span><a class="editor-rtfLink" href="https://www.atlassian.com/whitepapers/devops-survey-2020" target="_blank" rel="noopener"><span data-preserver-spaces="true">2020 DevOps Trends Survey by Atlassian</span></a><span data-preserver-spaces="true">, organizations see a number of benefits from DevOps implementation, including:</span></p>
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/71qli8z0hu4xvpdn00c3.jpeg)
<p><span data-preserver-spaces="true">Speaking of tangible DevOps benefits, an example from our experience would be a 5x increase in the speed of delivery of new features that we helped achieve in&nbsp;</span><a class="editor-rtfLink" href="https://itrexgroup.com/case-studies/the-lucky-day-app-devops-automation/" target="_blank" rel="noopener"><span data-preserver-spaces="true">gaming app development</span></a><span data-preserver-spaces="true">.</span></p>
<h2><span data-preserver-spaces="true">DevOps implementation best practices</span></h2>
<p><span data-preserver-spaces="true">It's impossible to oversell the importance of automation for a successful DevOps implementation roadmap. Automation, however, cannot be done overnight. It's a journey with multiple stops and requires careful planning. According to the Boston Consulting Group's (BCG) classic article,&nbsp;</span><a class="editor-rtfLink" href="https://www.bcg.com/publications/2017/technology-digital-leaner-faster-better-devops" target="_blank" rel="noopener"><span data-preserver-spaces="true">Leaner, Faster and Better with DevOps</span></a><span data-preserver-spaces="true">, organizations implement DevOps in four automation steps:</span></p>
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ckvdrg7aadpzq9b9mjei.jpeg)
<ul>
<li><strong><span data-preserver-spaces="true">Continuous Integration</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">An essential part of agile processes, CI allows DevOps teams to always work with the latest code version. In the CI process, developers push new pieces of code into a shared repository at least once a day for validation through an automated build and testing, which typically includes unit, integration, and basic security tests. Builds and tests are triggered by a version control tool for code check-ins which the server is watching. So, CI is a fully automated process run within a few seconds or minutes to allow developers to know immediately if their code is right and has successfully integrated with others' code or has broken the build.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Continuous Delivery</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">Continuous Delivery automates the build-test-release process, allowing new builds to be released with one button push. While CI is focused on the quality of code to make sure it passes all testing before being merged into the master build, the objective of CD is to ensure through more testing that the software (the master build) behaves as intended in the real world. CD is a short cycle, completed in a few hours, enabling the team to automate everything in the life of a code. In essence, it consists of two pipelines: a CI pipeline and continuous testing.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Continuous Deployment</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">In a Continuous Deployment process, code changes are deployed automatically after successfully passing the complete testing cycle. There is no need for human intervention to decide what to release and when. Continuous Deployment differs from Continuous Delivery in only one thing: it involves an automated push to production environments. Continuous Deployment, however, requires setting up a rigorous automated testing framework.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Continuous Monitoring</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">If an organization's environment is automated, ensuring its stable performance will be an imperative. In DevOps infrastructure, there are a lot of things you can monitor, but it is, however, impossible to keep track of all of the services and procedures. So, when implementing DevOps, you need to understand which are your primary monitoring targets. These can include the efficiency of your CI/CD pipeline, deployment milestones, automated handling of vulnerabilities, server health, user activity, application logout output, and application performance. You do the job either through application monitoring tools like Datadog or Newrelic or by going manually through application logs or by configuring the notifications and alarms. Important metrics to watch are failures, usage patterns, performance, availability, scalability, and custom telemetry.&nbsp;</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Plus, Configuration Management</span></strong><span data-preserver-spaces="true">&nbsp;</span></li>
</ul>
<p><span data-preserver-spaces="true">This process in DevOps implementation ensures optimal configuration of multiple testing environments, set up for unit testing, integration testing, load testing, acceptance testing, end-user testing, and more. Unlike in the traditional organization where configuration management is done through formal documentation, this process in a DevOps environment is automated to a great degree &mdash; configurations are encapsulated in code or scripts and controlled through a version control tool. Configuration management systems have given rise to:</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Infrastructure as a code,</span></strong><span data-preserver-spaces="true">&nbsp;which codifies all infrastructure resources in a code or a script, with the text files stored in a version control tool like Git.</span></li>
<li><strong><span data-preserver-spaces="true">Configuration as a code,</span></strong><span data-preserver-spaces="true">&nbsp;which defines server configurations as a code or script and commits them to version control.</span></li>
</ul>
<p><span data-preserver-spaces="true">Infrastructure automation enables automated infrastructure provisioning, configuration, and scaling,&nbsp;</span><a class="editor-rtfLink" href="https://itrexgroup.com/case-studies/infrastructure-as-code-solution-for-mobile-game-developer/" target="_blank" rel="noopener"><span data-preserver-spaces="true">increasing productivity, saving costs, and freeing engineers for more creative tasks.</span></a></p>
<h2><span data-preserver-spaces="true">Step-by-step DevOps implementation plan</span></h2>
<p><span data-preserver-spaces="true">Drawing on our vast hands-on experience, we've compiled a list of practical recommendations on how to implement DevOps activities successfully:</span></p>
<ul>
<li><strong><span data-preserver-spaces="true">Start a DevOps initiative</span></strong><span data-preserver-spaces="true">&nbsp;DevOps adoption should start with a strong business justification. Your DevOps initiative should be aligned with hard-boiled business goals, rather than driven by a fear of missing out. The CIO plays a key role, initiating DevOps transformation as part of the organization's digital activities and planning financial investments and human resources.</span></li>
<li><strong><span data-preserver-spaces="true">Build a DevOps strategy</span></strong><span data-preserver-spaces="true">&nbsp;Program managers are responsible for developing the company's DevOps implementation strategy. They need to identify its vision based on challenges like production defects, complicated deployments or team burnout, and figure out how to make everything in a software development cycle continuous. It's also critical to set KPIs for your DevOps team. A common set of metrics, proposed by Nicole Forsgren, Jez Humble and Gene Kim in their book Accelerate, includes:&nbsp;</span><strong><span data-preserver-spaces="true">Lead time for changes&nbsp;</span></strong><span data-preserver-spaces="true">&ndash; the time it takes to go from code committed to code successfully running in production&nbsp;</span><strong><span data-preserver-spaces="true">Deployment frequency</span></strong><span data-preserver-spaces="true">&nbsp;&ndash; software deployment to production or an app store&nbsp;</span><strong><span data-preserver-spaces="true">Time to restore service</span></strong><span data-preserver-spaces="true">&nbsp;&ndash; mean time to recover (MTTR)&nbsp;</span><strong><span data-preserver-spaces="true">Change failure rate</span></strong><span data-preserver-spaces="true">&nbsp;&ndash; how often deployment failures occur in production that require an immediate rollback</span></li>
<li><strong><span data-preserver-spaces="true">Set up a competent team</span></strong><span data-preserver-spaces="true">&nbsp;No matter whether your company chooses to go with an in-house or outsourced model, people on your team should be qualified and eager to learn new things. They should be experts in advanced DevOps tools, able to think out of the box when configuring complex scenarios, and&hellip; have the patience to troubleshoot and debug as many times as needed to find the root cause of a problem. Consider including a release manager, automation experts, testers, QA lead and SecDevOps engineers in your team. The right people are key. According to the 2020 DevOps Trends Survey, a lack of skills is the number one inhibitor to successful DevOps implementation.</span></li>
<li><strong><span data-preserver-spaces="true">Choose the right tools</span></strong><span data-preserver-spaces="true">&nbsp;There are many good DevOps tools available today, from release planning to building, testing, and safely delivering applications. In fact, there is an overwhelming amount of them that keeps growing, so it's easy to get confused. Get expert help if needed and don't be. When choosing DevOps tools, be also sure to understand how they will fit together to avoid ending up with what Gartner calls disconnected islands of automation. What you will need is an integrated toolchain and systematic automation implemented with tools aligned at each stage.</span></li>
<li><strong><span data-preserver-spaces="true">Containerize your applications</span></strong><span data-preserver-spaces="true">&nbsp;Сontainerization makes your application easy to execute. Containers, implemented with tools like Docker or Kubernetes, are basically an isolated process for an executable file running on a Linux machine. They include code, dependencies, binaries, libraries, and other things your software needs, presenting an environment that can follow the application from development to testing to production deployment. Containers are considered the best choice for a microservices architecture that splits your application in multiple microservices focusing on smaller tasks and providing scalability, flexibility, easier automated testing, and rapid deployment.</span></li>
<li><strong><span data-preserver-spaces="true">Integrate infrastructure automation with CI/CD</span></strong><span data-preserver-spaces="true">&nbsp;You should run a number of application services integrations to make infrastructure automation tools such as Kubernetes, Chef, or Puppet work with CI/CD tools (Jenkins, Bamboo or other). Seamless integrations will arm you with a consistent set of services applied automatically. As a result, you will be able to deploy new infrastructure configurations and release new software way faster.</span></li>
<li><strong><span data-preserver-spaces="true">Automate testing</span></strong><span data-preserver-spaces="true">&nbsp;To achieve DevOps-style speeds and agility with DevOps implementation, it is important to automate testing as much as possible but as appropriate. Once you add&nbsp;</span><a class="editor-rtfLink" href="https://itrexgroup.com/services/automated-testing/" target="_blank" rel="noopener"><span data-preserver-spaces="true">automation testing</span></a><span data-preserver-spaces="true">&nbsp;to the process, checks are run the moment new code is complete, and your developers no longer have to spend days on trying to remember and fix code written many weeks ago. According to Slava Makovsky, QA Automation Team Lead at ITRex with more than 15 years of experience with a global tech giant, there are&nbsp;</span><a class="editor-rtfLink" href="https://itrexgroup.com/blog/automation-testing-benefits-best-practices/" target="_blank" rel="noopener"><span data-preserver-spaces="true">few things to remember when implementing test automation:</span></a><span data-preserver-spaces="true">&nbsp;1. Start with creating simple test cases, rather than designing a complex automation framework up front 2. Smoke tests are an imperative 3. Use remote machines to run tests from the very beginning 4. Make sure you've got a well-thought-out plan for running tests in parallel and as part of your CI/CD pipeline 5. Set up capabilities to analyze test results on a daily basis</span></li>
<li><strong><span data-preserver-spaces="true">Start Small</span></strong><span data-preserver-spaces="true">&nbsp;Before configuring any complex scenarios, it is safer and more beneficial to begin with small initiatives in DevOps implementation. Pick carefully your first app and scale only when you are ready. There are basically no restrictions for applying DevOps, but web-enabled agile applications are a popular choice for the first moves. These applications are often architectured from the beginning with a lean or agile mindset that complements DevOps.</span></li>
<li><strong><span data-preserver-spaces="true">Collect feedback</span></strong><span data-preserver-spaces="true">&nbsp;"</span><em><span data-preserver-spaces="true">We all need people who will give us feedback. That's how we improve</span></em><span data-preserver-spaces="true">," Microsoft Founder Bill Gates said. There are two types of feedback you might want to seek: feedback on bugs and incorrect usage. Apart from collecting customer-centric data, such as the load time of your application, the maximum number of concurrent users or performance differences between web, mobile app and wearables, you can garner feedback directly from your users. You can either build user feedback mechanisms within your application using emojis, star ratings or binary-type questions, or ask users through your app or in an email to join a survey, or study public discussions. Feedback is an essential part of the DevOps loop, informing the next steps and enhancements.</span></li>
</ul>
<h2><span data-preserver-spaces="true">A final note</span></h2>
<p><span data-preserver-spaces="true">While it may be cliche to say that every business should implement DevOps today if they want to keep up with the pace of innovation and stay competitive, almost half of organizations are only starting with DevOps, practicing it for less than three years, according to the 2020 DevOps Trends Survey. DevOps transformation indeed can be complicated. It is not an initiative that can be undertaken once and for all. It is not even done after you implement continuous practices. These will require continuous improvement as well.</span></p>
<p><a class="editor-rtfLink" href="https://itrexgroup.com/contact-us/" target="_blank" rel="noopener"><span data-preserver-spaces="true">Contact ITRex</span></a><span data-preserver-spaces="true">&nbsp;if you are interested in learning more about DevOps or need help from our experienced consultants with starting or accelerating your DevOps journey.</span></p>