What is DevOps?
So what exactly is DevOps? It’s complicated. DevOps is not necessarily a specific set of tools or processes but rather a key set of ideas and practices in modern software development that enable the fast, stable and more frequent releases of software. It achieves this through optimizing the release cycle of the software, improving software development practices, improving automation and bringing transparency to the release process.
But to really understand what DevOps is and why it is so important, we need to look at the ideas and principles that DevOps was built on. This begins by looking a little into the history of software development.
Where did it all start - brief history of software development and devops
In the early days of software development, the software release process was similar to the hardware it ran on. Mistakes in hardware are expensive (or impossible) to change once released and the impacts of mistakes can be huge. The software release process mirrored this and releases were meticulously planned, carefully built into products before being tested and finally, when it was ready (or ready enough), released on physical media to end users.
But software is not hardware - it can be constantly changed and rebuilt cheaply.
Agile software development builds the foundation
Throughout the 1990s, software developers were seeing the problems with these inflexible development processes and starting finding ways to improve the software release cycle. This is often seen as culminating with the 2001 release of the Manifesto for Agile Software Development, which combined many of these ideas into a set of principles to guide teams and businesses on how to become more efficient at building software.
Agile practices and how they can be implemented is a whole topic in itself, but for the purpose of this article we can look at the key aspects that agile development brought:
- Iterative, incremental development of working software
- Focusing on adding small, complete and working changes into the software keeps the software in a releasable state and provides transparency into what is ready or still needed.
- Adapt to change and release frequently
- By planning and working in short iterations, there is flexibility when new requirements or needs become known. The small changes made to the software each iteration allow for straight forward reprioritization and mean the software can be released when needed.
- Stakeholders and developers working together
- Encouraging the business and technical sides of projects to collaborate enables everyone to have a better understanding of the software. Developers gain an understanding of why they are doing what they are doing & the stakeholders have visibility into the development of the software.
- Continuous improvement
- Short iterations mean that it is quick to try out new ideas or optimizations in the development process. This also lends itself to teams having a focus on constantly evaluating and optimizing as the short cycles leave little bandwidth for wasted time or effort.
Continuous Integration & Continuous Delivery pave the way
Throughout the 2000s, agile development (including frameworks such as Scrum, Extreme Programming, Kanban etc) grew in popularity with teams using short, adaptable iterations to construct software. To optimize their workflows, teams also started using Continuous Integration (CI), Continuous Delivery (CD) and test automation frameworks.
Continuous integration is the process of taking changes from developers and merging them as early as possible into the main product code. This is also coupled with automated testing, so that each of the changes are individually tested and the overall quality of the software is always understood. A natural extension to CI is Continuous Delivery, where the automation and testing tools were extended to include automatically building releasable units of software.
All of this tooling shared a common goal: decrease the time taken for teams to see the impact their changes had on the product as a whole. The optimization of this feedback loop reinforced the mindset to automate the whole release process to make it as efficient as possible. The optimization of this feedback loop set the foundation for DevOps methodologies.
DevOps methodologies emerge
Combining the development teams' agile mindset, capability to incrementally build software and the growth of the internet and SaaS platforms throughout the 2000s led to the formation of DevOps. It took the ideas of agile development, including continuous integration and delivery, but expanded to encompass the whole release cycle.
This goal became known as “DevOps”, a term formed from bridging the gap between the development of software and its operation (i.e. its deployment and monitoring for end users). It aimed to provide the answer on how to deploy software updates that bring value to end users quickly and transparently whilst retaining high quality.
As an extension of the general principles of agile software development, the DevOps methodologies were similar but allowed the whole organization, including developers, project stakeholders, testers and operations, to understand the overall release process and work more effectively together.
DevOps took the CI & CD tools and made them broader in scope to automate the complete building, testing, release and deployment of software (known as Continuous Deployment and confusingly also referred to as CD). This DevOps tooling takes code changes from a developer, feeds them into one end of an automated pipeline and pushes software updates out of the other. This focus on continuously deploying software also led to an evolution in software architecture, where systems were designed to be easily deployable, configurable and recoverable.
Finally, the growth of internet connected products & services also meant that real-time monitoring of production software was possible. This provided a lot of transparency into the released state of the software and gave developers visibility into the impact of any released software updates.
Why is DevOps important?
Even after a decade, DevOps is still evolving and a critical aspect of modern software development. It is a culture born on agility and failing fast. The influence of DevOps can be seen in other modern methodologies such as DataOps in the data science domain and MLOps for machine learning.
More concretely, DevOps provides the practices and frameworks that guide the organization focused on software releases to collaborate through transparency and visibility into the whole release pipeline. This transparency leads to measurable ways to optimize the release process which in turn allows organizations to iterate on new ideas faster and adapt to change.
DevOps influences software architecture as modern solutions are chosen and designed in a way that allows for the continuous deployment of the software. The huge ecosystem of DevOps tooling allows organizations to understand the state of their software releases and feed these findings back into the development process.
The importance of DevOps cannot be understated as it brings a fundamental mindset that encourages iterative learning. This ability to try new things, quickly observe what works and what doesn’t drives an innovative mindset within teams and organizations.
How to get started with DevOps?
The good news is that DevOps is a set of ideologies and approaches that you can start working with straight away. There is no rigid end state, no question of “Are we DevOps yet?”, no mandatory tools. It starts with the goal of optimizing the software release cycle and grows from there. Depending on the organization's size & needs, the integration of DevOps tools and methodologies may be handled by developers, individual DevOps engineers or dedicated DevOps teams.
To get started with DevOps, ask the following questions:
- Are your teams agile? Do they work in a way that allows for flexibility in their long term plans? Agility is at the core of DevOps. If your teams cannot adapt to change very easily, it should be your first focus to develop this capability as it provides the foundation for all the benefits DevOps brings. To get started here, familiarize yourself with agile development and work with your teams to start using these practices.
- What is the maturity of your teams’ build, testing and release tooling? Do they have a high degree of automation? DevOps transparency. Continuous integration and automated testing tools. Another large part is in infrastructure management tools, especially infrastructure-as-code (IaC) frameworks. Also evaluate your software product, what can be improved to make it easier to automate its build, testing and deployment?
- How is communication between development, stakeholders and operations? Are there mechanisms in place that allow feedback in the development cycle? If you are deploying releases continuously, you need to be monitoring those releases continuously to make sure your software is operational. You need to make sure the correct monitoring or alerts are in place to quickly detect any issues. There needs to be a process in place so that issues impacting your end users easily be fed back into the development lifecycle. To get started here, look at the logging and monitoring tools that you can implement. Make sure that users of those tools are able to identify and communicate any issues to the development team.
DevOps is a broad and sometimes difficult topic to describe. It is built upon decades of software development practices and there is no single way of implementing its ideologies. But when you start into the world of DevOps ask the question “As a developer, if I make this change does it help or impact the end users?” - the faster you can provide the answer to this question the better.
FAQ: DevOps in a nutshell
What is DevOps?
DevOps is not so much a specific set of tools or processes but a set of ideas and practices that enable the fast, stable and more frequent releases of software. DevOps practices are continuously evolving and are a critical aspect of modern software development – and the projected growth of the DevOps market reflects its importance.
What are the goals and benefits of DevOps?
The goal of DevOps is to bridge the gap between the development of software and its operation (i.e. its deployment and monitoring for end users). DevOps aims to deploy software and software updates that bring value to end users quickly and transparently whilst retaining high quality. Agility, transparency, and high quality of software are the main benefits of DevOps.
Why is DevOps important?
DevOps provides the practices and frameworks that guide the organization focused on software releases. DevOps influences software architecture as modern solutions are chosen and designed in a way that allows for the continuous deployment of the software.