What is DevOps?
Learn how DevOps unifies people, process, and technology to bring better products to customers faster
A compound of development (Dev) and operations (Ops), DevOps is the union of people, process, and technology to continually provide value to customers.
What does DevOps mean for teams? DevOps enables formerly siloed roles—development, IT operations, quality engineering, and security—to coordinate and collaborate to produce better, more reliable products. By adopting a DevOps culture along with DevOps practices and tools, teams gain the ability to better respond to customer needs, increase confidence in the applications they build, and achieve business goals faster.
The benefits of DevOps
Teams that adopt DevOps culture, practices, and tools become high-performing, building better products faster for greater customer satisfaction. This improved collaboration and productivity is also integral to achieving business goals like these:
Accelerating time to market
Adapting to the market and competition
Maintaining system stability and reliability
Improving the mean time to recovery
DevOps and the application lifecycle
DevOps influences the application lifecycle throughout its plan, develop, deliver, and operate phases. Each phase relies on the others, and the phases are not role-specific. In a true DevOps culture, each role is involved in each phase to some extent.
In the plan phase, DevOps teams ideate, define, and describe features and capabilities of the applications and systems they are building. They track progress at low and high levels of granularity—from single-product tasks to tasks that span portfolios of multiple products. Creating backlogs, tracking bugs, managing agile software development with Scrum, using Kanban boards, and visualizing progress with dashboards are some of the ways DevOps teams plan with agility and visibility.
The develop phase includes all aspects of coding—writing, testing, reviewing, and the integration of code by team members—as well as building that code into build artifacts that can be deployed into various environments. DevOps teams seek to innovate rapidly without sacrificing quality, stability, and productivity. To do that, they use highly productive tools, automate mundane and manual steps, and iterate in small increments through automated testing and continuous integration.
Delivery is the process of deploying applications into production environments in a consistent and reliable way. The deliver phase also includes deploying and configuring the fully governed foundational infrastructure that makes up those environments.
In the deliver phase, teams define a release management process with clear manual approval stages. They also set automated gates that move applications between stages until they’re made available to customers. Automating these processes makes them scalable, repeatable, controlled. This way, teams who practice DevOps can deliver frequently with ease, confidence, and peace of mind.
The operate phase involves maintaining, monitoring, and troubleshooting applications in production environments. In adopting DevOps practices, teams work to ensure system reliability, high availability, and aim for zero downtime while reinforcing security and governance. DevOps teams seek to identify issues before they affect the customer experience and mitigate issues quickly when they do occur. Maintaining this vigilance requires rich telemetry, actionable alerting, and full visibility into applications and the underlying system.
While adopting DevOps practices automates and optimizes processes through technology, it all starts with the culture inside the organization—and the people who play a part in it. The challenge of cultivating a DevOps culture requires deep changes in the way people work and collaborate. But when organizations commit to a DevOps culture, they can create the environment for high-performing teams to develop.
Collaboration, visibility, and alignment
One hallmark of a healthy DevOps culture is collaboration between teams, which starts with visibility. Different teams such as development and IT operations must share their DevOps processes, priorities, and concerns with each other. These teams must also plan work together as well as align on goals and measures of success as they relate to the business.
Shifts in scope and accountability
As teams align, they take ownership and become involved in additional lifecycle phases—not just the ones central to their roles. For example, developers become accountable not only to the innovation and quality established in the develop phase, but also to the performance and stability their changes bring in the operate phase. At the same time, IT operators are sure to include governance, security, and compliance in the plan and develop phase.
Shorter release cycles
DevOps teams remain agile by releasing software in short cycles. Shorter release cycles make planning and risk management easier since progress is incremental, which also reduces the impact on system stability. Shortening the release cycle also allows organizations to adapt and react to evolving customer needs and competitive pressure.
High-performing DevOps teams establish a growth mindset. They fail fast and incorporate learnings into their processes, continually improving, increasing customer satisfaction, and accelerating innovation and market adaptability. DevOps is a journey, so there is always room to grow.
Beyond establishing a DevOps culture, teams bring DevOps to life by implementing certain practices throughout the application lifecycle. Some of these practices help accelerate, automate, and improve a specific phase. Others span several phases, helping teams create seamless processes that help improve productivity.
Continuous integration and continuous delivery (CI/CD)
Continuous integration is a software development practice in which developers merge code changes frequently into the main code branch. Continuous integration employs automated testing, which runs every time new code is committed so the code in the main branch is always stable.
Continuous delivery is the frequent, automated deployment of new application versions into a production environment. By automating the steps required for deployment, teams reduce issues that may occur upon deployment and enable more frequent updates.
When both practices are in place, the resulting process is CI/CD, which includes the full automation of all steps between code commit to production deployment. Implementing CI/CD allows teams to focus on building code and removes the overhead and potential human error in manual, mundane steps. CI/CD also makes the process of deploying new code quicker and less risky. Deployments then happen more frequently and in smaller increments, helping teams become more agile, more productive, and more confident in their running code.
Version control is the practice of managing code in versions—tracking revisions and change history to make code easy to review and recover. This practice is usually implemented using version control systems such as Git which allow multiple developers to collaborate in authoring code. These systems provide a clear process to merge code changes that happen in the same files, handle conflicts, and roll back changes to earlier states.
The use of version control is a fundamental DevOps practice, helping development teams work together, divide coding tasks between team members, and store all code for easy recovery if needed.
Version control is also a necessary element in other practices such as continuous integration and infrastructure as code.
Agile software development
Agile is a software development approach that emphasizes team collaboration, customer and user feedback, and high adaptability to change through short release cycles. Teams that practice Agile provide continual changes and improvements to customers, collect their feedback, then learn and adjust based on customer wants and needs. Agile is substantially different from other more traditional frameworks such as waterfall, which includes long release cycles defined by sequential phases.
Kanban and Scrum are two popular frameworks associated with Agile.
Infrastructure as code
Infrastructure as code defines system resources and topologies in a descriptive manner that allows teams to manage those resources as they would code. Those definitions can also be stored and versioned in version control systems, where they can be reviewed and reverted—again like code.
Practicing infrastructure as code helps teams deploy system resources in a reliable, repeatable, and controlled way. Infrastructure as code also helps automate deployment and reduces the risk of human error, especially for complex large environments. This repeatable, reliable solution for environment deployment lets teams maintain development and testing environments that are identical to production. Duplicating environments to different data centers and cloud platforms likewise becomes simpler and more efficient.
Configuration management refers to managing the state of resources in a system including servers, virtual machines, and databases. Using configuration management tools, teams can roll out changes in a controlled, systematic way, reducing the risks of modifying system configuration. Teams use configuration management tools to track system state and help avoid configuration drift, which is how a system resource’s configuration deviates over time from the desired state defined for it.
Practiced in conjunction with infrastructure as code, both system definition and configuration are easy to templatize and automate, helping teams operate complex environments at scale.
Continuous monitoring means having full, real-time visibility into the performance and health of the entire application stack, from the underlying infrastructure running the application to higher-level software components. This visibility consists of the collection of telemetry and metadata as well as the setting of alerts for predefined conditions which warrant attention from an operator. Telemetry comprises event data and logs collected from various parts of the system, which are stored where they can be analyzed and queried.
High-performing DevOps teams ensure they set actionable, meaningful alerts and collect rich telemetry so they can draw insights from vast amounts of data. These insights help the team mitigate issues in real time and see how to improve the application in future development cycles.
Teams have many DevOps tools to help them facilitate a DevOps culture in their organization. Most teams rely on several tools, building custom toolchains that fit their needs for each phase in the application lifecycle. While adopting a specific tool or technology is not the same as adopting DevOps, when the DevOps culture is present and the processes are defined, people can implement and streamline DevOps practices if they choose the proper tools. Get the tools to put DevOps into practice:
DevOps and the cloud
Cloud adoption has fundamentally transformed the way teams are building, deploying, and operating applications. Together with the adoption of DevOps, teams now have greater opportunity to improve their practices and better serve their customers better.
With the ability to quickly provision and configure multi-region cloud environments with unlimited resources, teams gain agility in deploying their apps. Now, instead of having to buy, configure, and maintain physical servers, teams create complex cloud environments in minutes, then shut them down when they’re no longer needed.
As more and more applications use container technology, Kubernetes is becoming the industry solution for orchestrating containers at scale. Automating the processes of building and deploying containers via CI/CD pipelines and monitoring these containers in production are becoming essential practices in the age of Kubernetes.
With most of the overhead of managing infrastructure moved to the cloud provider, teams can focus on their apps rather than the underlying infrastructure. Serverless computing offers the ability to run applications without configuring and maintaining servers. Some options reduce the complexity and risk of deployment and operations.
Start your DevOps journey
DevOps is practiced across different roles in an organization and requires several of them to collaborate closely. In most cases, DevOps roles include development, IT, operations, security, and support.
DevOps is not limited to a single role. Everyone who takes part in each of the application lifecycle phases must embrace the DevOps culture. However, in some organizations there are a few people or teams whose sole focus is enabling automation, defining practices, and implementing CI/CD pipelines. Sometimes, the official title of these roles is DevOps engineer or DevOps specialist.
Adopting DevOps in a large organization can be extremely challenging. Changing the culture of a large organization as well as standardizing processes and tooling requires patience and persistence. In most large organizations, there are early adopters of DevOps practices. As these practices reach maturity and yield positive results, other teams usually follow—beginning their DevOps journey.
The true meaning of DevOps is all about delivering continuous value to customers. The results of adopting DevOps must be measured in relation to business objectives. DevOps teams align around these objectives and achieve them using short release cycles. These cycles allow agile response to the market and continuous learning through customer feedback.
Both DevOps and Agile are modern software development frameworks for producing a product, a launch, or a release. DevOps is a culture, fostering collaboration among all roles involved in the development and maintenance of software. Agile is a development methodology designed to maintain productivity and drive releases with the common reality of changing needs. DevOps and Agile are not mutually exclusive and are often practiced together.
Along with continuous integration, continuous delivery and continuous deployment are practices that automate phases of software delivery.