What is DevOps?
DevOps is an approach to enable teams to independently build, test and deploy solutions quickly, safely reliably and securely to customers.
DevOps is a combination of mindset and practices that bring development teams and operations together to enable them to collaborate towards a common goal. Operations does not go away; it becomes part of a development team collectively accountable for delivery.
The objective of DevOps is to:
Flow work into production as fast as possible.
Achieve stability, reliability, availability, and security.
Principles
The DevOps approach encompasses three principles to guide teams to achieve the prescribed objectives:
To move code steadily and continuously through a pipeline to production.
Gathering real-time data to solve and anticipate problems and optimise the system.
Continuous learning & experimentation. Propagate local ideas and improvements organisationally wide.
Practices
Achieving flow of code to production requires the implementation of a deployment pipeline. Once a feature has been implemented, it passes through several automated steps on its way to production.
Automated testing checks code against defined criteria. Automated testing is typically performed at different levels, from unit testing to smoke testing depending on how far it has progressed through the pipeline. Any test failures result in the feature exiting the pipe.
Continuous integration enables developers to integrate with other developers and teams as they go eliminating the need for high-risk integration phases and facilitating the ability to release small incremental changes.
The implementation of low-risk release strategies drives continuous delivery, where deployments may happen on an hourly or a daily basis. Rollback, Blue/Green deployments and feature flags are standard techniques.
Ongoing monitoring of the production environment is essential. Production telemetry allows the DevOps team to identify issues and fix them as they occur. Monitoring trend data they can also anticipate and mitigate problems too.
Ensuring security resilience etc. are integrated into the lifecycle ensures that these concepts are not just an afterthought and bolted on after deployment, but they are considered throughout. Implementing scanning of the source code repository for security vulnerabilities is an example of building integrity into the system from the earliest stages.
Relationship between develops and agile
The principles and practices of DevOps are highly compatible with agile. DevOps done well is likely to improve an organisation's ability to respond to change. The focus on flow and stability are valuable characteristics that make it easier for the business to deliver value.
DevOps and agile are independent ideas with a significant crossover and shared values. Each can be used without the other, but it is common for an agile team using practices such as Scrum, Kanban, or SAFe to simultaneously use DevOps. In the case of SAFe, DevOps forms a core part of the framework itself.