Emerging Tech Development & Consulting: Artificial Intelligence. Advanced Analytics. Machine Learning. Big Data. Cloud
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.
With DevOps adoption, 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 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."
In the DevOps environment, 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 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.
DevOps implementation above all means a cultural shift. Because DevOps is mostly about soft stuff:
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.
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 — 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.
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.
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, “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 a data-driven decision.
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.
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.
According to the 2020 DevOps Trends Survey by Atlassian, organizations see a number of benefits from DevoOps implementation, including:
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 gaming app development.
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, Leaner, Faster and Better with DevOps, organizations implement DevOps in four automation steps:
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.
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.
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.
If an organization’s environment is automated, ensuring its stable performance will be 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 automation enables automated infrastructure provisioning, configuration, and scaling, increasing productivity, saving costs, and freeing engineers for more creative tasks.
Drawing on our vast hands-on experience, we’ve compiled a list of practical recommendations on how to implement DevOps activities successfully:
1. Start a DevOps initiative
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.
2. Build a DevOps strategy
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:
3. Set up a competent team
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… 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.
4. Choose the right tools
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.
5. Containerize your applications
С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 into multiple microservices focusing on smaller tasks and providing scalability, flexibility, easier automated testing, and rapid deployment.
6. Integrate 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.
7. Automate 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 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 few things to remember when implementing test automation:
Start with creating simple test cases, rather than designing a complex automation framework upfront.
8. Start 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 DevOps.
9. Collect feedback
“We 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: 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.
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.
Also published at https://itrexgroup.com/blog/how-to-implement-devops/
Create your free account to unlock your custom reading experience.