DevOps is the blending of the terms development and operations, meant to represent a collaborative or shared approach to the tasks performed by a company's application development and IT operations teams. The term DevOps is used in several ways. In its most broad meaning, DevOps is an operational philosophy that promotes better communication between these teams -- and others. In its most narrow interpretation, DevOps describes the adoption of automation and programmable software development and infrastructure deployment and maintenance. The term may also label a culture that strategically looks at the entire software delivery chain, overseeing shared services and promoting the use of new development tools and best practices.
While DevOps is not a technology, there are tools commonly used in DevOps environments. These include continuous integration and continuous delivery or continuous deployment tools, with an emphasis on task automation. Other products to support DevOps include real-time monitoring and incident response systems as well as collaboration platforms.
A DevOps approach can coexist with Agile software development; IT service management frameworks, such as IT Infrastructure Library; project management directives, such as lean and six sigma; and other strategies to execute IT projects to meet business needs. While it is typically associated with Agile development, the two methodologies do not need to be used in concert.
Patrick Debois, a software development consultant, is credited with coming up with the term DevOps in 2009 by naming a conference DevOps Days. The concept of DevOps was then popularized with the book The Phoenix Project in 2013. The Phoenix Project is a novel about DevOps, using a fictional narrative as an example to help IT managers understand the concepts and benefits of collaboration and shared technologies. It illustrates the endemic problems in IT that DevOps solves, such as division and mistrust between developers and IT admins, lack of automation leading to long lead times and errors, and misalignment of business requirements and projects to serve them.
DevOps vs. Waterfall development
In Waterfall development, developers test new code in an isolated environment for quality assurance (QA) and -- if requirements are met -- release the code to operations for use in production, usually in a bundle with other releases so that operations can tightly control the process. The operations team deploys the program and maintains it from that point on. Waterfall approaches usually engender a long time between software releases and because developer and operations teams work separately and the development team is not always aware of operational roadblocks that might prevent code from working as anticipated.
The DevOps approach seeks to meld application development and deployment into a more streamlined process that aligns development, QA and IT operations team efforts with fewer gates and more continuous flow. This approach also shifts some of the operations team's responsibilities onto the development team to facilitate continuous development, continuous integration, continuous delivery and continuous monitoring processes. It is a way to tear down the metaphorical silos that isolate steps in the software delivery process to release code faster and more often.
DevOps and Agile development
Agile is a software development approach focused on incremental and rapid cycles of code creation and delivery referred to as sprints. Each sprint iterates upon the last, creating a high level of flexibility, as changes and scope and direction can be evaluated between each cycle. However, it is possible for the original vision of a project to be lost through this cycle.
DevOps arose from the success in the speed of development in Agile, when it became clear that there is a lack of communication between development and operations teams that put a significant hindrance on speed and flexibility of code delivery to users.
As Agile development became more efficient, it became clear having development and operations work apart from each other was inefficient. Before DevOps, development and operations teams worked in a way where those who wrote the code had separate objectives and leadership from those who deployed and supported the code. With DevOps and Agile, communication between development and operations ensures code can be managed by both teams fluently without miscommunications or confusion. DevOps does not have an official framework, nor does it consider speed as a core focus (rather speed in development is achieved through what DevOps focuses on). Agile relies on the Agile manifesto and often is formalized with a framework, such as Scrum.
DevOps benefits and drawbacks
DevOps benefits include the following:
- increased communications between development and operations leading to fewer silos;
- coverage for the whole software delivery pipeline (through builds, validations, and deployment);
- a focus on automation within the delivery pipeline;
- streamlined development processes by making development teams aware of possible issues that may appear in operation stages; and
- broad roles in DevOps environments, allowing many IT generalists to find positions in DevOps teams.
However, DevOps can fail with these downsides:
- Some say Dev and Ops are not enough, and DevOps should include business (BizDevOps), security (DevSecOps) and test specifically. The theme is that DevOps must include other groups crucial to IT success.
- Organizational difficulties, such as transitioning to the DevOps practice, require large cultural changes including team reorganization, which takes time to get used to.
- DevOps can be expensive to adopt and operate if an organization has only a few releases in a year.
- DevOps will need adequate automation tools.
Although marketers have jumped on the DevOps bandwagon, there is really no such thing as a DevOps product. There is software that helps the development and operations team work together more efficiently and respond to changing requirements more flexibly. Automation is a common focus in DevOps, ranging from container orchestrators to monitoring software, and commonly found throughout continuous integration and delivery (CI/CD) pipelines. New types of software tools have sprung up to help organizations automate development, testing and deployment to create a more streamlined development and release pipeline.
Version-controlled source code repositories store code, which developers from multiple teams can work on over time. Developers can check, reset, update and revert to a previous version of code if needed. To help with automation, CI/CD tools can automatically respond to code commits in repositories. Version-controlled source code repositories allow developers to keep track of modifications made to the source code, and without one, developers may run into issues such as tracking which changes have been recently made and which are available to end users. Tools for storing code include Git and the cloud-hosted product based on it, GitHub.
Artifact repositories allow for object-based outputs to be version-controlled. Managing an artifact repository is a good practice for the same reasons as managing version-controlled source code repositories. Common tools to manage artifact repositories include JFrog or Nexus Repository.
Jayne Groll of the DevOps Institute explains DevOps in modern IT orgs.
Jenkins is a common tool utilized for CI/CD pipelines, as is Travis CI. CI/CD enables DevOps teams to frequently validate and deliver applications to the end user through automation and continuous movement of code throughout the development lifecycle. Continuous integration enables developers to create, test and validate code into a shared repository daily, if not multiple times a day. Continuous delivery pairs with CI, enabling more production-level tests and configuration setups. Once approved, code from CI/CD pipelines is deployed into a live production environment by operations teams. Continuous deployment invokes automated testing, configuration and provisioning, with release management and monitoring with automated rollback capabilities.
Containers are deployable packages of software that rely on virtual isolation to run applications on a shared OS. Containers provide abstraction that enables code to move from development to test and staging then production without concern for the changes in underlying infrastructure. Common containerization tools include Docker, Microsoft Hyper-V and Windows Server containers. Container orchestrators, such as Kubernetes, can help automate, deploy, scale and maintain containers.
Configuration management systems, such as Puppet and Chef aid in provisioning servers and configuring software, middleware and infrastructure. Administrators, for example, can utilize configuration management tools to set up and enforce policies on servers, containers and VMs, automatically creating the proper deployment setup for code releases.
Additionally, monitoring tools such as Nagios can be utilized to observe performance and security of code releases on systems, networks and infrastructure. Analytics tools such as Splunk can be used for operational intelligence. DevOps teams can analyze how changes to code affect the overall environment.
DevOps as a service is a delivery model for a set of tools that facilitates collaboration between an organization's software development team and the operations team. In this delivery model, the DevOps as a service provider assembles a suite of tools and handles all their integrations to seamlessly cover the overall process of code creation, delivery and maintenance.
The role of DevOps engineer does not fall along one career track; professionals can enter into the position from a variety of backgrounds. DevOps is often said to be more of a philosophy or a collaborative IT culture rather than a strictly defined job description or skill set. Because the area is so broad, DevOps positions suit IT generalists better than specialists.
For example, a DevOps engineer may start as a software developer that oversees aspects of operations and gains skills over the full stack from code to hosting infrastructure. Conversely, a DevOps engineer may move up from a system administrator role because they have coding, scripting, integration and testing knowledge.
The DevOps engineer's responsibilities include changing business processes as needed to solve organizational problems and improve business outcomes.
Other titles often found in DevOps organizations include infrastructure developer, site reliability engineer and full-stack developer.
Most entry-level DevOps jobs require a degree in computer science or a related field that covers coding, QA testing and IT infrastructure components. Higher-level positions may require advanced degrees in systems architecture and software design.