Subscribe
Share
People, processes, and tools are the three foundational pillars of DevOps — the term coined by Patrick Debois in 2009 to describe a new culture of collaboration and shared ownership in software development. In DevOps, software is developed and delivered in short cycles supported by automation and tools. But DevOps implementation is not all hard stuff. According to Patrick Debois, DevOps is more a human problem. Or, as Viktor Farcic put it in his book The DevOps Paradox, it’s "a people game" 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. DevOps transformation strategies, 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." Everyone is working together toward the same goal — 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 start DevOps transformation. This way, you will only get a third silo. Instead, you change the culture of Dev and Ops to break down the walls between them. In this article, you will learn a lot about a true DevOps culture, what benefits you can get from DevOps, best practices, and key steps you should include in your DevOps transformation roadmap.

What is exactly DevOps?

DevOps implementation above all means a cultural shift. Because DevOps is mostly about soft stuff. And its key components are: Empathy and collaboration 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. Mutual responsibility A DevOps implementation journey 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 — from version control to production deployment. However, individually, developers are still responsible for a piece of code they’ve written. “You build it, you run it,” Amazon CTO Werner Vogels once famously said. Knowledge sharing Scrum standup meetings and retrospectives, held as part of DevOps transformation, 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. Continual experimentation DevOps transformation centers around hypothesis-driven development. Failing fast to learn faster through a tighter feedback loop is key to successful 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, “Users don’t know what they want. Users know what they don’t want once you’ve built it for them.” So, the DevOps mindset is about starting with intuition and learning lessons as you move forward to arrive at data-driven decisions. Customer centricity A successful DevOps strategy 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. Automation A very strong emphasis in any DevOps transformation roadmap should be put on automation that reduces human error and amplifies speed, cutting overhead costs. In a DevOps culture, automation 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.

Why DevOps transformation ― Key DevOps benefits

According to the 2020 DevOps Trends Survey by Atlassian, organizations are reporting huge benefits from Devops implementation, including:
benefits of devops implementation
DevOps benefits reported by companies in Atlassian's survey (% of respondents)
Speaking of tangible DevOps benefits, an example from our experience would be a 5x increase in the speed of delivery of new features that our DevOps team has helped achieve in gaming app development.

DevOps implementation best practices

It’s impossible to oversell the importance of automation for a successful DevOps transformation 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, Leaner, Faster and Better with DevOps, organizations automate four major processes as part of DevOps transformation:
Continuous Integration An essential part of agile processes, CI enables 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. It allows developers to know immediately if their code is right and has successfully integrated with others’ code or has broken the build. Continuous Delivery Continuous Delivery, another important process of DevOps transformation, automates the build-test-release flow, 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. Continuous Deployment 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. Continuous Monitoring 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. Plus, Configuration Management 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 — configurations are encapsulated in code or scripts and controlled through a version control tool. Configuration management systems have given rise to:
  • Infrastructure as a code, which codifies all infrastructure resources in a code or a script, with the text files stored in a version control tool like Git.
  • Configuration as a code, which defines server configurations as a code or script and commits them to version control.
Infrastructure automation enables automated infrastructure provisioning, configuration, and scaling. A real-world example from our experience would be a developer of gaming apps with millions of users that achieved huge cost savings through increased productivity with IaC implementation.

Your DevOps implementation plan

Drawing on the vast hands-on experience of our DevOps team, we’ve compiled a list of the nine most important steps that any company embarking on a DevOps transformation journey should include in its DevOps implementation roadmap. Here they are:
  • Starting your DevOps initiative right DevOps benefits are compelling, but DevOps transformation always needs a strong business justification. This means that your DevOps transformation roadmap should be closely aligned with hard-boiled business goals, rather than driven by a fear of missing out. The CIO plays a key role here, initiating DevOps transformation as part of the organization’s digital activities, and planning investment and human resources.
  • Building your DevOps strategy Program managers are responsible for developing a detailed 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 essential to set KPIs for your DevOps team. An efficient set of metrics, proposed by Nicole Forsgren, Jez Humble and Gene Kim in their book Accelerate for measuring the performance of DevOps teams, includes: Lead time for changes – the time it takes to go from code committed to code successfully running in production Deployment frequency – software deployment to production or an app store Time to restore service – mean time to recover (MTTR) Change failure rate – how often deployment failures occur in production that require an immediate rollback
  • Setting up a competent team No matter whether your company chooses to go with an in-house or outsourced model, make sure people on your team are eager to learn new things. And they should not be just experts in advanced DevOps tools. It's equally important for your DevOps team to be able to think out of the box when configuring complex scenarios and have the patience to troubleshoot and debug as many times as needed to find the root cause of a problem. Your DevOps team should ideally include a release manager, automation experts, testers, QA lead, and SecDevOps engineers. The right people are key. According to Atlassian's 2020 DevOps Trends Survey, a lack of skills is the number one inhibitor to successful DevOps implementation.
  • Choosing the right tools There are a myriad of good DevOps tools available today, from release planning to building, testing, and safely delivering applications. In fact, their amount is overwhelming and keeps growing, so it’s easy to get confused. Get expert help if needed. But when choosing DevOps tools, be sure to understand how they fit into your DevOps transformation roadmap and how they 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.
  • Containerizing your applications Сontainerization makes your application easy to execute, playing an important role in DevOps transformation. 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 into multiple microservices. Microservices allow your DevOps team to focus on delivering independent pieces of functionality, providing along the way utmost scalability, flexibility, easier automated testing, and rapid deployment.
  • Integrating infrastructure automation with CI/CD 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.
  • Automating testing 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 automation testing 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 a few things to remember when implementing test automation: 1. Start with creating simple test cases, rather than designing a complex automation framework upfront 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
  • Starting Small 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 a DevOps strategy.
  • Collecting feedbackWe all need people who will give us feedback. That’s how we improve,” Microsoft Founder Bill Gates said. There are two types of feedback you might want to seek in software development as part of your DevOps transformation: 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.

A final note

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.
Contact us if you are interested in learning more about DevOps or need help from our experienced consultants with starting or accelerating your DevOps transformation journey.