Today, there is no consensus in the industry regarding the definition of DevOps. Every organization has formulated their own definition of DevOps and has tried to implement it accordingly. They have their own perspective and tend to think they have implemented DevOps if they have automation in place, configuration management is enabled, they are using agile processes, or any combination thereof.
DevOps is about the delivery mechanism of software systems. It is about bringing people together, making them collaborate and communicate, working together toward a common goal and vision. It is about taking joint responsibility, accountability, and ownership. It is about implementing processes that foster collective and service mindset. It enables a delivery mechanism that brings agility and flexibility within the organization. Contrary to popular belief, DevOps is not about tools, technology, and automation.
Automation acts as an enabler to implement agile processes, induce collaboration within teams and help in delivering faster and better.
There are multiple definitions of DevOps available on the Internet and they do not provide a complete definition. DevOps does not provide a framework or methodology. It is a set of principles and practices that, when employed within an organization, engagement, or project, achieve the goal and vision of both DevOps and the organization. These principles and practices do not mandate any specific process, tools and technologies, or environment. DevOps provides guidance which can be implemented through any tool, technology, and process, although some of the technology and processes might be more appropriate than others to achieve the vision of DevOps principles and practices.
Although DevOps practices can be implemented in any organization that provides services and products to customers, for the purposes of this book, we will look at DevOps from the perspective of a software development and operations department of any organization.
So, what is DevOps? DevOps is defined as follows:
- It is a set of principles and practices.
- It brings both the Developers and Operations teams together from the start of the software system.
- It provides faster and more efficient end-to-end delivery of value to end customer again and again in a consistent and predictable manner.
- It reduces time to market, thereby providing a competitive advantage.
If you look closely at this definition of DevOps, it does not indicate or refer to any specific processes, tools, or technology. It does not prescribe any particular methodology or environment.
The goal of implementing DevOps principles and practices in any organization is to ensure that stakeholders’ (including customers) demands and expectations are met efficiently and effectively.
Customers’ demands and expectations are met when:
- The customer gets the features they want.
- The customer gets the features they want when they want.
- The customer gets faster updates on features.
- The quality of delivery is high.
When an organization can meet these expectations, customers are happy and remain loyal to the organization. This, in turn, increases the market competitiveness of the organization, which results in bigger brand and market valuation. It has a direct impact on the top and bottom lines of the organization. The organization can invest more in innovation and customer feedback, bringing about continuous changes to its system and services in order to stay relevant.
The implementation of DevOps principles and practices in any organization is guided by its surrounding ecosystem. This ecosystem is made up of the industry and domain the organization belongs to.
The core principles of DevOps are as follows:
- Collaboration and communication
- Agility towards change
- Software design
- Failing fast and early
- Innovation and continuous learning
- Automating Processes and tools
The core practices of DevOps are as follows:
- Continuous Integration
- Configuration Management
- Continuous Deployment
- Continuous Delivery
- Continuous Learning
DevOps is not a new paradigm. However, it has gained a lot of popularity and traction in recent times. Its adoption is at its highest level so far and more and more companies are undertaking this journey. I purposely mentioned DevOps as a journey because there are different levels of maturity within DevOps. While successfully implementing continuous deployment and delivery are considered the highest level of maturity in this journey, adopting source code control and agile software development is considered among the lowest.
One of the first things DevOps talks about is breaking the barriers between the Development and Operations teams. It brings close collaboration between multiple teams. It is about breaking the mindset that the development team is responsible only for writing code and passing it on to operations for deployment once it is tested. It is also about breaking the mindset that Operations has no role to play in development activities. Operations should influence the planning of the product and should be aware of the features coming up for release. They should also continually provide feedback to Development on any operational issues so that they can be fixed in subsequent releases. They should have some influence in the design of the system to improve its overall functionality. Similarly, Development should help the operations team with the deployment of the system and solve incidents as and when they arise.
The definition talks about faster and more efficient end-to-end delivery of systems to stakeholders. It does not talk about how fast or efficient the delivery should be. It should be fast enough depending on the organization’s domain, industry, customer segmentation, and more. For some organizations, fast enough could be quarterly, while for others it could be weekly.
Both types are valid from a DevOps point of view and they can deploy any relevant processes and technology to achieve their particular goal. DevOps does not decide what that goal is. Organizations should identify the best implementation of DevOps principles and practices based on their overall project, engagement, and vision.
The definition also talks about end-to-end delivery. This means that everything from the planning and delivery of the system to the services and operations should be part of the DevOps implementation. The processes should be such that they allow for greater flexibility, modularity, and agility in the application development lifecycle. While organizations are free to use a best-fit process such as Waterfall, Agile, Kanban, and more, typically organizations tend to favor agile processes with an iterations-based delivery. This allows for faster delivery in smaller units, which are far more testable and manageable compared to a large delivery.
DevOps talks about delivering software systems to the end customer again and again in a consistent and predictable manner. This means that organizations should continually deliver newer and upgraded features to the customer using automation. We cannot achieve consistency and predictability without the use of automation. Manual work should be reduced to zero to ensure a high level of consistency and predictability. The automation should also be end-to-end, to avoid failures. This also indicates that the system design should be modular, allowing faster delivery while remaining reliable, available, and scalable. Automated testing plays an important role in consistent and predictable delivery.
The result of implementing the previously mentioned practices and principles is that organizations can meet the expectations and demands of their customers. Such an organization can grow faster than its competition and further increase the quality and capability of their products and services through continuous innovation and improvement.