What is DevOps?
DevOps is about bringing Software Development and Operations together in order to improve the speed and safety of Software Delivery. This blog post gives a high level introduction to the concept of DevOps.
DevOps is a way of working that brings the functions of Software Development and Operations closer together in order to improve the speed and safety of Software Delivery. DevOps is about breaking the “silos” of traditional IT teams, allowing for a collaborative and automated approach in order to deploy software changes more frequently and with more stability.
There are many advantages to delivering software more quickly:
- Faster delivery of features.
- Faster resolution of issues/bugs.
- More stable environments.
- Improved innovation/experimentation.
- Less time spent planning/preparing for changes.
By delivering features more quickly customer needs can be met in less time, saving development costs and improving customer satisfaction. Fixes can also be deployed more quickly, resulting in greater stability and uptime, and less time wasted applying workarounds. Faster delivery enables more innovation and experimentation, so you could (for example) test one or more changes on a subset of customers to see the difference it made to your KPIs (Key Performance Indicators) such as number of sales or the value of sales. By being able to experiment and innovate you remain competitive. Companies that can’t respond quickly to changing customer demands risk being overtaken by their competitors.
Jez Humble, co-author of the DevOps Handbook coined the term CALMS for assessing organizational readiness to adopt DevOps or to assess their progress through a DevOps transformation. There are 5 pillars:
- Culture
- Automation
- Lean
- Measurement
- Sharing
Culture
DevOps is foremost about culture. Being successful with DevOps is likely to require an organisation to rethink and restructure and will require some buy-in from many parts of the business across all levels. Beware relabelling a single team or function, while keeping everything else the same. DevOps is about having shared goals and these goals need to be understood across the different functions. Sometimes this might need to apply both in IT and outside of it. Ultimately your DevOps culture needs to focus on:
- Reducing friction between teams.
- Sharing success and failure.
- Having consistent goals and measures.
Automation
In order to deliver changes with speed and safety, DevOps has a heavy focus on automation, particularly with regards to continuous integration, deployment and testing. There are many tools available to aid in this journey and many of the tooling concepts (such as source control and build pipelines) are not new to Software Development. DevOps encourages these tools and processes to be extended into Operations, so that the flow of changes into code can be automated all the way to Production. Test automation is essential in order to deliver the “safety” aspect of your delivery pipeline. Infrastructure as Code and Configuration Management are important in order to deliver consistent environments quickly. These tools can also help minimize costs by allowing environments to be built and destroyed quickly when required.
Lean
Lean originates from the car manufacturing industry and is about eliminating waste, focussing on quality and delivering quickly. Lean is about considering your process and identifying opportunities for improvement, be that by automating a task that is long or error prone or by shortening the time between tasks (such as by improving collaboration between teams). Lean is about driving continuous improvement: creating a feedback loop so that each cycle of the process drives improvements into the next.
Measurement
Measurement is a pillar of DevOps because without it you cannot evaluate if you are improving or succeeding. There are lots of tools to assist with measurement and ensuring you have the right measures identified and tracked is essential. Give consideration to KPIs such as:
- How long does it take for a change/fix to get from development to production?
- How reliable is the product/service? (uptime)
- How long does it take to recover from failure? (MTTR - Mean Time to Repair)
- What is the usage level/trends of the product or service?
- How responsive is the product/service? (performance)
Sharing
As stated in culture, DevOps is about sharing success and failure and in doing so teams need to share responsibilities. In order to build a culture of collaboration Developers should work with operations to share the responsibility of troubleshooting production problems, or responding to issues out of hours (on call). That isn’t to say that Developers should be hired with the expectation that they have the skillset of operations, it simply avoids the “throwing it over the wall” culture that may have existed pre-DevOps.