The term DevOps means different things to different stakeholders in software projects, such as developers and IT operations staff.
DevOps, as a philosophy, requires buy-in. Some call it a movement that promotes cooperation and open communication between two historically divided roles in IT: software developers and operations managers. Others look at DevOps specifically as a set of tools that enable production-ready code on a rapid release schedule, with programmable infrastructure.
DevOps has its roots in the Agile software development methodology, but you don't have to adopt Agile to do DevOps, or vice versa. DevOps plays a pivotal role in cloud computing, but its principles apply to on-premises systems as well. The term DevOps shows up in job titles on career sites, but the skill set required for roles such as DevOps engineer varies widely from one company to another.
Read these answers to fundamental questions to understand the basics of DevOps for development and operations professionals, and the many ways in which the term DevOps is used.
What problem does DevOps solve?
DevOps brings together developers -- who write the software -- with IT operation managers -- those responsible for deploying it. Traditionally, these two groups have been siloed, working separately. So, DevOps solves a communication problem, which leads to better software quality.
The relationship between developers and IT operations is often adversarial. Here's a common stereotype: Developers expect IT operations managers to release new applications or updates on command, even though the code in question wasn't thoroughly tested. And another one: IT operations managers, who consider frequent code updates risky, ignore change requests from the development side, holding up new releases.
DevOps is a collaborative approach to release applications and updates into production. Operations generates feedback that improves the code and results in a better product. DevOps can mean better informed handoffs from one team to the other throughout the software development lifecycle (SDLC). In other cases, developers take over operations responsibilities. For example, a feature developer might troubleshoot performance problems on production servers when they release new code.
DevOps defines a way for the two groups to work together effectively. The goal is to get them to trust one another and understand sometimes conflicting needs and priorities. However, some organizations find that other essential teams remain siloed, which slows software releases or causes poor user satisfaction. Common examples are QA and test, security and business stakeholders. DevOps can evolve into DevTestOps, DevSecOps or BizDevOps: Each term refers to a collaborative approach among these other specialized team members along with developers and IT operations.
While DevOps promotes better communication, it can lead to wide-ranging changes in how development and operations staff members work, and the tools they use to do their jobs.
What is the relationship between DevOps and Agile?
DevOps is an offshoot of Agile software development. It builds on common practices of the Agile methodology, such as continuous integration and ongoing releases of code into production. Much like Agile, DevOps is an organizational culture or mindset, but it can be codified into a set of practices and tools.
Agile software development originated with the Agile Manifesto in 2001. This document lays out four values and 12 principles for a better software development process. The Agile movement led development teams to respond to customer feedback and adapt to changes on the fly rather than follow a set plan. It specifies continuous software delivery to meet those common goals.
The concept of DevOps originated when Agile teams realized that frequent code releases would require them to work effectively with the operations team. IT consultant Patrick Debois is largely credited with coining the term DevOps. He organized the first DevOpsDays conference in 2009, as way to bring people from development and operations roles together.
What are DevOps tools?
There are no specific tools required for DevOps. In a small IT department, a good relationship between the developer and IT admin is all you need. However, most organizations need additional vendor tools to facilitate DevOps adoption. DevOps adoption can cause disruptions across IT infrastructure and development and management tooling, especially for large distributed enterprises.
Many DevOps organizations adopt a CI/CD pipeline, which enables continuous integration and continuous delivery or deployment. A CI/CD tool set typically comprises the following:
- source code management and version control;
- artifact manager;
- CI engine;
- test tools;
- configuration management and other automation tools;
- containers and cloud hosting; and
- a suite of monitoring tools for infrastructure and applications.
Some or all of these tools integrate with a collaboration platform used by everyone. Figure 1 provides an example of how CI/CD tools fit within DevOps.
Collaboration tools enable development, test and operations professionals to communicate clearly, track activities and make relevant information available to all stakeholders. An online release calendar, for example, shows expected release dates for projects in development. Operations can schedule routine maintenance and other work around expected release dates.
DevOps doesn't require a complete overhaul of the tools already in use by development and IT operations. Some organizations already have application lifecycle management software to achieve some of these tasks. They might only add a CI engine to trigger code to automatically move from one step to the next. The shared release calendar described above can enable continuous delivery without any additional changes to deployment processes. Many IT teams use monitoring tools already, though they might augment them for new hosting technologies. And while containers and cloud computing are typical choices for DevOps environments, they're not required.
Is DevOps only for cloud?
DevOps can be more than a means of improving interactions between development and operations teams. It is a way to specify technical information about an application's needs, so that resources and connectivity are programmable rather than managed by a person. With this purpose in mind, DevOps encourages cloud adoption.
In the cloud, an operations professional can manage thousands of compute instances. On software teams with strong DevOps practices, operations managers work closely with developers to map out operational configurations needed for the application, such as the necessary dependencies, resource consumption limits, scaling settings and other infrastructure considerations. When the application resources are specified properly, provisioning tools can automatically read this information, which enables operations managers to automate the software deployment process. On cloud environments, there is no need to physically set up new infrastructure.
What does a DevOps job role entail?
Hiring for a DevOps role typically indicates that the company runs applications and data on the cloud, and IT employees are needed to manage these deployments. The company probably handles development in house and treats this software as a differentiator for business success. Most companies that offer DevOps job positions also have other IT teams that handle commercial off-the-shelf software, technology infrastructure, tech support and other tasks.
DevOps manager and DevOps engineer job titles, as well as DevOps-centric specialist titles such as full-stack developer and site reliability engineer, appear all over employment websites. But the skill sets associated with DevOps roles vary greatly from company to company. Here are a few of the possibilities.
DevOps engineer can mean a system administrator who works with configuration management and automation tools. In another company, a DevOps engineer, or back-end engineer, is an operations manager who works closely with developers. And still other companies use the DevOps engineer role, or software engineer role, to refer to a developer who deploys updates to production and performs incident response work.
Site reliability engineer (SRE), similarly, is someone who can manage IT operations and infrastructure as code. The SRE might also automate changes and fix underlying weaknesses in the SDLC. The SRE job title originated at Google, which published a book on the concept.
DevOps manager is a role that might resemble an Agile project manager, but with added responsibility that covers deployment and operations. Or, the DevOps manager might be an IT manager for cloud- and CI/CD-based projects, working alongside development leadership.
Full-stack developer is a person that typically writes application and infrastructure code. For example, a full-stack developer creates a user-facing feature, sets up the database to support it and ties these application components to a scalable cloud instance for deployment. The stack, in this job title, refers to the layers of the software's components, from UI to operating system to hosting technologies.
DevOps adoption also leads to centralized roles to support DevOps teams. An incomplete list of additional DevOps roles includes:
- IT automation specialist
- Test automation engineer
- Kubernetes platform engineer
- DevOps analyst
- CI/CD pipeline engineer
Developers and operations administrators can move into DevOps roles by cultivating automation, cloud and container management skills. They also should focus on effective communication and a broad understanding of software, from requirements and design to bug fixes and performance across platforms. Cross-skilling can make someone appealing as a DevOps jobs candidate. For example, developers who learn how to run staging environment tests will extend their reach across the SDLC. A systems administrator who gains the ability to write infrastructure as code also demonstrates DevOps promise.