There are myriad ways to define what DevOps is – many of them competing and sometimes even contradictory, which can make it difficult to understand. While there’s no one “right” definition, think of DevOps as the intersection of organizational culture, processes, and tools needed to release high quality software and systems at scale quickly, continually, and reliably. More simply, the marriage of development and IT operations. DevOps helps ensure their collaboration and cooperation throughout the entirety of the software development lifecycle.
What is Dev? What is Ops?
What is it that makes Dev and Ops compatible? Both are intentionally vague terms on their own. DevOps in a general sense, doesn’t differentiate the wide variety of roles falling into the “IT operations” world ie: system administrators, release engineers, database administrators, security professionals, etc. While the “Dev” side may seem more obvious to software developers, it is intended to encompass everything contributing to the “development” of a product, which can also include designers, quality assurance, and more. This vagueness is meant to illustrate how DevOps concepts encompass everyone in an organization involved in the creation, delivery, and maintenance of software.
How DevOps Provide Value
During the advent of Agile methodologies, organizations quickly learned the benefits of iterative design and releasing working product into the hands of end users as quickly as possible so feedback can be gathered as quickly as possible. DevOps is the most modern evolution of this idea: DevOps aims to shorten the amount of time it takes to take product development ideas from inception to completionby taking the feedback learned from releasing each iteration and baking these lessons back into the development process to improve the next cycle. This allows teams to progress more quickly through the entire process. The DevOps Lifecycle, or the DevOps Feedback loop, is the foundation for the entire methodology and is achieved through a combination of cultural and technical practices.
DevOps in Practice
DevOps practices are reliant on a culture of collaboration and continuous improvement. DevOps teams should be product-based and cross-functional, rather than role-based, and should include every member within the organization needed to make a product work from inception to completion. Teams are often comprised of software developers, infrastructure engineers, security experts, and QA. This makes communication smoother and faster to release product improvements while also ensuring team priorities are product-oriented. Otherwise, you risk priorities being fragmented across a half-dozen role-based teams, where each role believes their associated scope of responsibilities are the most important.
Like the Agile methodologies, DevOps preaches a culture of open and honest communication. Team members can safely identify and address issues in how the team is working without fear of reprisal. Feedback and experience gained from each release cycle can be addressed in a timely manner and considered for the next cycle. This allows the team to “shorten” the feedback loop. With each release and lesson learned, they should ideally be able to get through the entire process faster.
Continuous Integration / Continuous Deployment
From a technical perspective, DevOps is oriented around the concept of Continuous Integration and Continuous Deployment (CI/CD). The CI/CD process aims to automate as much of the development lifecycle as possible to release the smallest, fastest product iterations possible. Mature DevOps teams successfully leverage a suite of tools to provide code source control, automated testing, active monitoring and telemetry, and automated release capabilities. Ideally, teams achieve a point where once code has been written, committed, and reviewed, it can be moved through the deployment pipeline without so much as a button press. All testing and progression through the organizations’ various deployment environments happens as with as little human-interaction as possible. This helps minimizes lag time and capacity for human error. Teams just getting started with DevOps will likely have some amount of manual input needed, but one of the goals of every DevOps team should be to get to this point.
Getting Started with DevOps
It’s important to understand that DevOps is not just culture or just tools. Many organizations hyper-focus on one subset of DevOps practices and miss out on many of the benefits DevOps has to offer. The best tools and most open culture alone won’t make your teams any more productive.
With that said, how do you get started with DevOps? Start with helping your organization understand the value, principles, and practices foundational to DevOps. Be able to explain what your organization can achieve with DevOps and how it will help your organization improve. While there is no single path to implementing DevOps and practices are constantly evolving, find the intersections of your organization’s culture, tools, and processes to see where DevOps can have the biggest impact.