BACKGROUND IMAGE: iSTOCK/GETTY IMAGES
DevOps is a portmanteau 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 broadest meaning, DevOps is an operational philosophy that promotes better communication and collaboration between these teams -- and others -- in an organization. In its most narrow interpretation, DevOps describes the adoption of programmable software development, automation and infrastructure deployment and maintenance. The term also labels a culture that oversees the entire software delivery chain and shared services and promotes the adoption of new development tools and best practices.
While DevOps is not a technology, but there are tools used commonly 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.
Jayne Groll of the DevOps Institute explains DevOps in modern IT orgs.
Some IT professionals don't believe that the simple combination of Dev and Ops is enough, and the term DevOps should explicitly include business (BizDevOps), security (DevSecOps) and testing. A successful DevOps environment must include all groups critical to IT success, regardless of any segment additions to the term.
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 IT operations can control the process. The operations team deploys the program and maintains it from that point on. Waterfall approaches engender long periods of time between software releases and, because developer and operations teams work separately, the development team is not always aware of operational roadblocks that prevent code from working as anticipated.
The DevOps model melds application development and deployment into a more streamlined process that aligns development, QA and IT operations efforts with fewer gates and more continuous workflow. This approach -- called shift left -- transfers some of the operations team's responsibilities 'left' in the app delivery pipeline to the development team to facilitate continuous development, continuous integration, continuous delivery and continuous monitoring processes. DevOps practices tear down the metaphorical silos that isolate steps in the software delivery process to release code faster and more often.
DevOps vs. 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, which creates a high level of flexibility; IT administrators can evaluate more easily the changes, scope and direction between each cycle. However, it is possible for the original vision of a project to be lost through this cycle.
DevOps arose from Agile's success and development speed when it became clear that there is a lack of communication between development and operations teams -- as well as between IT and the business side of the organization -- that put a significant hindrance on speed and flexibility of code delivery to users.
As Agile's development efficiency proved to IT organizations that split development and operations teams creates bottlenecks . In an Agile workflow, development and operations teams have separate objectives and leadership. When an organization uses DevOps and Agile together, both development and operations teams can manage code without miscommunications or confusion. DevOps does not have an official framework, nor does it consider speed as a core focus. Agile relies on the and often is formalized with a framework such as Scrum.
DevOps benefits and challenges
DevOps benefits include the following:
- Increased communications between development and operations, which leads to fewer silos;
- Coverage for the whole software delivery pipeline through builds, validations and deployment;
- A focus on delivery pipeline automation;
- Streamlined development processes through increased responsibility and code ownership in development; and
- Broader roles, which provides a reliable job market for IT generalists.
- DevOps requires significant organizational and IT departmental changes -- as various teams come together and job roles change, people involved need time to adjust -- as well as a forum to provide feedback.
- Adoption can be prohibitively expensive if an organization releases code updates infrequently. The collaborative aspect of DevOps adoption benefits
- DevOps requires comprehensiveautomation tools.
DevOps is a methodology, not a toolset; instead, there is software that enables the development and operations teams to work together more efficiently and respond to changing requirements more flexibly. Automation is a key focus in DevOps, ranging from container orchestrators to monitoring software, and found commonly throughout continuous integration and delivery (CI/CD) pipelines. Additional, expanded types of software tools to help organizations automate development, testing and deployment create a more streamlined development and release pipeline.
Code repositories. Version-controlled source code repositories store code, which developers from multiple teams can work on over time. Developers check, reset, update and revert to a previous version of code if needed. To support automation, CI/CD tools respond automatically 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. Artifact repositories enable version-controlled object-based outputs. Artifact repository management is a good practice for the same reasons as version-controlled source code repository management. Common tools to manage artifact repositories include JFrog or Nexus Repository.
CI/CD pipeline tools. 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. Common CI/CD tools include Jenkins and Travis CI. Continuous integration enables developers to create, test and validate code in a shared repository as often as the organization needs, up to multiple releases per day. Continuous delivery pairs with CI, which enables more production-level tests and configuration setups. Once approved, IT admins deploy code from the CI/CD pipeline into a live production environment. Continuous deployment invokes automated testing, configuration and provisioning; release management and monitoring feature automated rollback capabilities.
Containers. Containers are deployable software packages that rely on virtual isolation to run applications on a shared OS. Containers provide abstraction that enables code to move from development to testing and staging, then to production without concern for changes in underlying infrastructure. Common containerization tools include Docker, Microsoft Hyper-V and Windows Server containers. Container orchestrators, such as Kubernetes, automate, deploy, scale and maintain containers.
Configuration management. Configuration management systems, such as Puppet and Chef, enable IT to provision servers and configuring software, middleware and infrastructure. For example, IT administrators use configuration management tools to set up and enforce policies on servers, containers and VMs, which create automatically the proper deployment setup for code releases.
Additionally, monitoring tools such as Nagios enable DevOps professionals to observe performance and security of code releases on systems, networks and infrastructure. Analytics tools such as Splunk provide operational intelligence. DevOps teams use these tools in conjunction to analyze how changes to code affect the overall environment.
As-a-Service models. DevOps as a service (DaaS) is a delivery model for a set of tools that facilitates collaboration between an organization's software development team and the IT operations team. In this delivery model, the DaaS provider assembles a suite of tools and handles the 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 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 starts as a software developer who oversees aspects of operations and gains skills over the full stack from code to hosting infrastructure. Conversely, another DevOps engineer moves 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 necessary 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.