DevOps is a term used to describe a set of practices and processes within an organization between the development, operations, and business teams. It first came to broad attention in 2009, when the first DevOpsDays conference was held in Ghent, Belgium founded by consultant, project manager and agile practitioner Patrick Debois.
DevOps is underpinned by a philosophy that aims to foster collaboration and reduce silos between different departments within an organization. It encourages communication, collaboration, integration and automation among teams to increase efficiency and improve the quality of software.
While it's not uncommon to see job titles like DevOps Engineer, Site Reliability Engineer and DevOps system administrator, DevOps was never intended to be a team role but rather a school of thought that is supported and embedded throughout the practices and ideology of an organization.
DevOps involves practices such as continuous testing and feedback cycles - not only in-house but also with the customer. It owes its roots to agile - a methodology of software testing of 'little and often' that endorses frequent testing and editing. However, it extends this beyond the developers to other teams with the focus on the organisation creating functional relationships within and continuous value for customers.
The Problem DevOps Aims to Solve
Prior to DevOps practices, teams working on the same product were frequently divided with their focus limited to their own team's output. The division of work was fragmented, didn't lend itself well to feedback, and slow. Creating software could involve:
- Devs writing code
- QA testers testing
- Deployment teams deploying
- The product owner doing market analysis
- The UX team testing the user experience
- The Operations team liaising with customers and working on the business purpose of the software.
Each team was in its own bubble - all working hard over a long period of time, but not terribly efficient and potentially clashing with task duplication - particularly problematic when something goes wrong and it's hard to pinpoint the root of the problem. They all face the pressure of on-time delivery, managing expectations, diagnosing and solving problems, and managing unexpected challenges.
DevOps addresses these challenges by establishing collaborative cross-functional teams and clear workflows. The teams have full ownership of software applications from design to production support and share responsibility to deliver value to the business and customers.
What is the DevOps Process?
DevOps involves a number of central practices. Conventional dev and operations teams might be split or merge into another configuration as members of feature and product teams embrace end-to-end responsibility.
Such a configuration could play out in a multitude of different forms. It could mean for example, the integration of operations people into product development teams. Or the existence of an ongoing DevOps team of DevOps advocates tasked with the specific remit of facilitating collaboration and cooperation between Dev and Ops teams.
With each iteration released, the DevOps team is able to assess and make decisions to improve and change other aspects of a project based on testing, discussion and feedback. Critical to DevOps is process documentation. Documentation is derived from automated processes such as post-deployment processes and alerts. Scripts such as server and software configuration can also provide timestamped historical documentation of the deployment process.
There are number of processes key to DevOps:
Continuous Delivery/Continuous Deployment (CD): Continuous delivery is about the flow of changes. Bug fixes, configuration edits, and new features continuously flow through into production and ultimately the hands of the user. Continuous deployment is the use of automation tools that enable teams to quickly deploy software into production, significantly reducing the amount of time it takes to develop, test, and deploy into production.
Continuous Integration (CI): Continuous integration (CI) is the practice of automating the testing and integration of code changes from multiple contributors into a single software project.
Continuous planning: Continuous planning is about working lean and smart, being able to adapt to change and responsive to the challenges of the work and the needs of the customer.
Continuous testing: Continuous testing shortens test-cycle times by allowing integration testing early in the lifecycle. It saves money and eliminates testing bottlenecks.
Continuous release and deployment: Continuous release and deployment involve automated continuous delivery, reducing the number of manual processes. It reduces errors and speeds up delivery.
Continuous monitoring: Continuous monitoring is the continual automated process of monitoring software configuration changes and adjustments. It helps develop and deliver software faster and more reliably to provide continuous value to your users.
Continuous feedback and optimization: Continuous feedback and optimization provide the crucial opportunity to analyse the customer journey and detect pain points that deflect from an optimal product and user experience.
As with any work, it's critical to have a way to measure the level of success. There are a number of DevOps metrics and different tools that can be used to measure them. If you're looking for somewhere to get started with the basics, the authors of Accelerate by Forsgren, et al., describe four key software delivery metrics:
- Lead Time: The time from code written to entering production
- Deployment Frequency: How often deploys happen
- Mean-Time-To-Recover (MTTR): How quickly can teams restore service after production outages
- Change Fail Rate: What percentage of deploys result in service impairment or an outage
Each of these provides useful metrics:
The authors describe lead time as “the time it takes to go from code committed to code successfully running in production”. Visually it could include moving a task from To Do to Done in a Trello Board. Or in pull requests, the journey from open to verified and merged. The priority here is having an agreed-upon process that is automated and tracked.
In Accelerate, the authors note “We settled on deployment frequency as a proxy for batch size since it is easy to measure and typically has low variability. By “deployment” we mean a software deployment to production or to an app store.”
The reason the frequency of production deployments matters. It enables you to track the frequency in which you are delivering value to the end-user. In developer terms, this could include tracking increments each time a deployment occurs. In business terms, a measurement could include revenue or customer feedback.
Mean Time to Recover
Measuring Mean Time to Recover (MMTR) is the time between a service being detected as “down” to it being a state of “available” from a user’s perspective. It's a measurement that is typically measured in hours and may refer to business hours as opposed to a 24-hour cycle. In terms of insights, MMTR can be used to track and help cross-functional teams identify issues and improve performance and reliability.
Change Failure Rate
The Change Failure Rate is the number of times a problem with a deployment occurs as a ratio of the total number of deployments. The expectation in a well-functioning organisation is that the Change Failure Rate should decrease over time as the team develops their experience and efficacy. When the failure rate increases over time or fails to reduce, it may indicate a problem in the DevOps process. Tools that measure the success of DevOps in an organisation will typically monitor a range of real-time processes and conditions, These may include:
- Repair tickets
- The schedule of tasks planned vs completed.
The Benefits of DevOps are here to stay
DevOps is a valuable philosophy that with appropriate buy-in from all stakeholders, can transform the entire supply chain of a company from Developers to IT and Business Managers. It can improve overall business performance and creates a workplace that is flexible and responsive to feedback. DevOps delivers transformation through improving staff morale and teamwork, shortens feedback loops and facilitates continuous improvements. The company not only moves faster but with the support of the cross-team collaboration and critical insights for future opportunities.