What is the DevOps Model? Exploring foundational practices in DevOps (original) (raw)

What is a DevOps model?

People often ask what a DevOps model is—but this misses the point of DevOps. DevOps is an approach to building software that touches the entire development lifecycle. It’s a mix of practices, culture, and technology intended to continuously deliver value to end users.

In short, there is no one-size-fits-all approach to DevOps. Its implementation varies from organization to organization. Despite this, DevOps does have a framework of practices that all organizations leverage in varying forms.

At the core of DevOps is the idea that everyone responsible for a product should collaborate as a unified team. Rather than work in separate development, quality assurance (QA), security, and operations silos, DevOps brings people together to take end-to-end responsibility for planning, building, delivering, and improving software.

How DevOps works varies from one company to the next. But there are three core themes you’ll find in every organization that successfully adopts DevOps.

Everyone is responsible for quality

DevOps reduces the barriers between the disciplines found in software development teams. Practitioners tend to focus on building end-to-end products instead of completing siloed, incremental projects. This means the same individual will collaborate across the full software development lifecycle from planning to building to testing and deploying a product.

Code ships when it’s ready

Traditional software development practices often bundle many changes into large releases. This means customers typically wait longer for software updates. It also makes it harder to predict the knock-on effect big code changes will have, putting greater pressure on development and operations teams. In contrast, DevOps favors incremental code changes that are easier to build and test—and to ship as soon as they are ready. Once a developer commits code changes to a project, continuous integration and deployment (CI/CD) tools facilitate automated tests, application builds, and code integration or issue reporting. Many DevOps practitioners extend the concept of continuous improvement to their own work, measuring and adjusting their processes over time.

Automation improves quality and predictability

In a successful DevOps practice, anything that can be automated should be automated. This reduces the risk of human error and makes products easier to scale. Tools are used to automate the configuration and deployment of infrastructure, while static analysis tools find and highlight security vulnerabilities. DevOps practitioners strive to automate repetitive tasks at every stage.

DevOps operating model

What is a DevOps operating model?

Compared to traditional development methods where programming teams write code, testing teams find bugs, and operations teams take care of the infrastructure, DevOps can seem like a radical change. As a practice, DevOps fundamentally seeks to transform organizations by bringing traditionally siloed teams together across every part of the SDLC.

While that may seem daunting, it’s possible to begin your DevOps journey with relatively small changes. To know where to start, let’s look at some of the operational implications of DevOps.

Our philosophy is to build automation and great DevOps for the company you will be tomorrow.

Senior SCM Engineer Todd O'Connor at Adobe

Culture

Tooling is often the most visible aspect of DevOps. However, DevOps starts with a cultural change intended to shift how we think about expertise and responsibility.

Consider traditional software development roles such as development, testing, and operations. They encourage people to think in terms of narrowly defined responsibilities and projects rather than looking at the product as a whole.

If writing code is distinct from running it, for example, then the person writing that code is less inclined to think about how to make their work easier to deploy or more resilient in the face of increased demand. In larger organizations, separate programming, QA, and operations teams might not even know each other.

A DevOps culture puts the emphasis on people and product. Distinct roles give way to individuals who share equal responsibility for delivering the product and nobody’s job is done until that software is solving problems in production.

For a DevOps culture to thrive, there are three principles an organization should adhere to:

By placing people above process, DevOps creates a culture where the system serves the individuals in helping them make the best possible product. And with hands-on understanding of each part of the development lifecycle rather than only a narrow area of expertise, those individuals can see how each element impacts the next. That insight leads to more thoughtful work that reduces friction across the software development lifecycle.

Team structure

In non-DevOps organizations, strict role silos separate architects from developers and developers from testers and operations professionals. From one week to the next, an individual might work on several projects without ever engaging in what happens when their job is done.

DevOps shifts the focus from projects and roles to products and people. The same individual or group of people take care of a product from planning through development and on into production. The goal is to remove the barriers between developers and operations professionals and replace that with “engineers” who have an end-to-end perspective with possible specialization. Job titles may vary from one organization to the next, but the central idea is that the reality of building a software product rarely matches up with neatly demarcated job roles.

By taking a product-centric view, DevOps puts practitioners closer to customer needs, saves costly context switching, and provides the agility to solve issues faster.

Process

In DevOps, the carefully crafted plans, bureaucracy, and wide-reaching releases of traditional software development make way for practices that enable ongoing, collaborative improvement.

In particular, DevOps organizations follow processes and practices that favor:

Tooling

Tooling is a practical manifestation of DevOps culture and process, and touches every part of the software development lifecycle. In DevOps, tools are often used to apply automation wherever possible, create feedback loops, and free up organizational resources.

DevOps tools often broadly fall into four categories:

DevOps model advantages and disadvantages

DevOps has proven its value in thousands of software development organizations across the world. According to Microsoft’s Enterprise DevOps Report, elite DevOps organizations ship code 4-5x faster than other organizations.

However, before you adopt DevOps in your organization you should be sure that you understand both its advantages and disadvantages.

Specifically, you should consider the following in relation to your products, people, and strategic goals:

Let’s look at some of the advantages and disadvantages of the DevOps model in a little more detail.

DevOps model advantages

DevOps can offer measurable improvements across each part of the software development lifecycle. To realize those gains takes a concerted, organization-wide effort to change culture, process, and tooling. In practice, organizations that successfully adopt DevOps typically report the following benefits:

DevOps model disadvantages

Most organizations start slow and build their DevOps culture over time. However, there are those that only partially adopt DevOps and consequently realize only limited benefits. Others implement DevOps processes without adapting them to the specific needs of their people, strategy, and products.

So, what are the possible disadvantages of a poorly designed DevOps strategy?

What about a DevOps maturity model?

Introducing DevOps to your organization is an ongoing journey with different levels of adoption across the many different stages of product delivery. DevOps is as dynamic as a business needs it to be, and its implementation varies from organization to organization.

This means there isn’t one defined DevOps maturity model. At GitHub, we shy away from talking about DevOps maturity models because it implies there’s a checklist any organization can use to achieve “DevOps.” This isn’t true. At its core, DevOps is an ongoing practice. However, there are common steps and markers of success businesses can work towards.

Our philosophy is to build automation and great DevOps for the company you will be tomorrow.

Senior SCM Engineer Todd O'Connor at Adobe

Take, for example, a company that is considering moving towards adopting a DevOps practice. At their starting point, the development and operations teams may be siloed and focused on their individual roles. That means that as the development team builds code, the operations team is forced to react to support that code. A good first step for this organization might involve bringing both teams together to begin planning, building, and shipping code collaboratively.

At the other end of the spectrum are organizations whose entire SDLC is automated and feature deep collaboration. Product-focused teams work together to deliver continual improvements, using automation and specialized DevOps tooling at each stage.

So even though every organization’s DevOps adoption journey is unique, these are key principles that indicate success. Here’s If you do these things you're doing DevOps well—but depending on your industry, you'll have things that are particular and necessary to your DevOps practice.

Key stages in the DevOps adoption journey