Development Operations, commonly referred to as DevOps, is one of the most influential trends in software development today. The term itself reflects what it does – merge development and operations processes, practices and responsibilities into a single DevOps software development approach.
In a traditional organisation, the software development team designs, codes and tests (QA is sometimes considered a third distinct team) a software application and then hands it over to the operations team, which is responsible for running it for users. DevOps unifies the development team and operations team into a single DevOps team with shared performance metrics.
Agile & DevOps teams and consultants
Supercharge your next cloud development project!
DevOps teams are almost always also described as ‘agile teams’ but there can be some confusion around the exact nature of the relationship between DevOps and Agile software development. The easiest way to think of the relationship between DevOps and Agile is to consider the former an extension of the latter’s principles.
A DevOps approach applies similar principles to those outlined by the Agile Manifesto but extends them across a single team that unifies development and operations roles, responsibilities and performance metrics.
DevOps solves a bottleneck problem associated with Agile development. When Agile frameworks like Scrum or Extreme Programming (XP) speed up the pace at which new iterations are developed, distinct operations teams can often struggle to test and deploy the software in a timely manner, and the value of rapid development is lost. Extending an Agile approach across the entire software development life cycle (SDLC) to deployment removes that bottleneck.
Despite its popularity, the concept of DevOps often lacks clarity for even many within or connected to the IT sector. That can see it mistaken as a buzzword that lacks real substance.
The fact its nature is described in so many different ways, interchangeably as a philosophy, culture, methodology, practices, set of tools and team roles undoubtedly has a lot to do with that. But there is no contradiction in saying DevOps can be all of those things simultaneously. In fact, to see its full benefits, DevOps should be:
To answer the question posed by the title of this section,“what’s the best definition of DevOps?”, we need to introduce why how DevOps can be described in so many different ways. And it also makes sense to explore what DevOps is not.
At its most abstract level, DevOps can be, and often is, described as a philosophy: “a theory or attitude that acts as a guiding principle for behaviour.”
The starting point of a successful DevOps approach to software development is that the team (many would even argue this should be at an organisational level, especially in a tech company) buy into the concept of why unifying development (including testing), and operations will lead to better outcomes across stakeholder groups.
While DevOps as a philosophy introduces it at a conceptual level, DevOps as a culture implies the concept manifesting itself in the approach through processes and practices.
A DevOps team culture implies habitually doing things, to the point they become ingrained, which support the realisation of the DevOps philosophy of unifying development, testing and operations as one continuous feedback loop.
A DevOps culture means that the approach, decisions and practices of software development teams, and other members of the organisation they work with directly or whose decisions affect them, are, as a default, intrinsically informed by the philosophy.
Instilling a DevOps culture involves cultivating multidisciplinary teams responsible for the entire lifecycle of a product. And fostering transparency, communication, and collaboration between roles with titles that would have traditionally been considered as belonging to the development or operations teams.
Gene Kim, one of the authors of the 2013 DevOps book The Phoenix Project as well as The DevOps Handbook (2016), formulated three guiding principles that should underpin a DevOps culture:
A methodology is a specific approach and order of doing things to reach a particular goal. Software development methodologies are no different and any new software product passes through the same 6 broad stages of a development life cycle:
DevOps life cycles are often presented as slightly more granular, adding two additional stages:
A DevOps methodology passes through these eight stages of software development and operations in an infinite loop.
If DevOps as a methodology is an order to doing things approximately represented by the infinite loop of the eight life cycle stages detailed, DevOps processes and practices are the series of actions, performed in a certain order, that make up those stages.
DevOps processes and practices are designed to speed up, automate, and streamline a phase. And some can span multiple stages. DevOps processes and practices include:
They might also include the processes and practices of a particular Agile framework DevOps acts as an extension of like Scrum, such as:
Or Kanban, for example:
Can We Help You With Your Next Software Development Project?
Flexible models to fit your needs!
DevOps is highly associated with the ecosystem of tools that have been developed in line with the cultural mantra “if you can automate it, you should automate it”.
DevOps is so pro-automation because it means:
It’s also why CI/CD pipelines are such an integral part of DevOps. But there are fantastic tools available to help automate or make more efficient every stage of the DevOps life cycle, as well as many of its processes and practices.
Octopus Deploy has put together a great list of tools commonly used by DevOps teams. Some, like those in the planning phase for example, are more general while others are more specific to the DevOps context:
Collaboration and project management tools
Source control is managed with Git and code repositories are hosted services for Git-managed code.
DevOps teams use CI platform, or build servers, to save time through the automation of code compiling, validation tests and package creation. Among the most popular are:
The packaging tools are used to convert code into deployable artefacts hosted and deployed by package repositories. Among the most popular are:
Release management and deployment tools help automate CI/CD pipelines, with popular options including:
Popular DevOps tools used for the setup, running, and pipeline infrastructure maintenance include:
DevOps tools use in monitoring scrape code and related systems for data that helps inform performance and customer usage decisions with popular options including:
DevOps is less about the introduction of new roles and job titles as it is about a redistribution of responsibilities across a team, with a more inter-disciplinarian approach. The entire team shares accountability for application and infrastructure planning, development, testing and release.
However, the title of DevOps Engineer is also now common to the point several studies pinpointed it as the most in-demand software development role in the world in 2021.
While DevOps engineers are in extremely high demand, the title can apply to a relatively wide variety of roles. A DevOps engineer working on one software development project can have significantly different responsibilities from another working on a different project. It’s even perfectly possible for a single DevOps team to contain multiple DevOps engineers with different focuses and responsibilities.
DevOps engineers are most commonly focused on building and maintaining CI/CD pipelines and have experience with setting up and using popular DevOps tools for:
For more details on the role of DevOps engineer you can check out our blogs Profile of a DevOps engineer and International DevOps engineer salary ranges and rates.
The benefit of a combined DevOps team is seen as higher quality, more reliable software that is iterated on faster. Which is why DevOps is such a major trend in contemporary software development.
The cloud services provider Microsoft Azure lists the benefits of DevOps as the business case deliverables:
In this blog, we’ll look at different but mutually compatible definitions of DevOps and how it is practically implemented to deliver the organisational benefits that make it such an influential trend.
DevOps realises benefits for software development teams and at an organisational level by helping to eliminate weaknesses inherent in the functional separation of those who write and test the code that forms a software application and those that deploy and support it.
The early proponents of DevOps like Patrick Debois, Andrew Shafer and John Allspaw argued there were inherent flaws in this separation which compromised the overall quality of software delivered to users. These stemmed from the fact that separate teams judged on different performance indicators were responsible for the same end goal; providing users with the highest quality software experience possible.
If the software development team has no involvement in or accountability for the successful deployment of the software they have built, human nature dictates they will be less invested in the quality and efficiency of that deployment. DevOps breaks downs the development and operations silos to share accountability and recognition for high quality software, defined as the user experience.
Any organisation that commits to a DevOps transformation needs KPIs to track and measure its impacts on strategic goals. These most often include:
DevOps is most associated with cloud and cloud-native development, though is by no means only applicable in that context. Broadly defined, cloud computing “allows infrastructure to be defined as code or templates, hence enabling the creation of repeatable processes that are not possible without cloud technologies.”
These “repeatable processes” are what allow the automation which is, as we’ll go on to explain in greater detail, central to DevOps development. In short, the speed, scale, and efficiency of the cloud help agile and DevOps teams to increase the speed and quality of their work.
Cloud-native development is most commonly described as “developed in the cloud for the cloud”. That refers to the reality that the development environment of cloud-native applications is, or should be, an exact replica of the production environment operations will run software in.
There are two core advantages to development and production infrastructure mirroring each other:
DevOps takes a cloud-first approach to any new application, which flips the question “should we use the cloud for this?”, instead asking “is there a reason not to use the cloud for this?”
Common reasons why an app should not be exclusively built and run in a cloud environment, or even at all, include security and regulatory requirements as well as sometimes broader infrastructure factors at an organisational level.
But not using the cloud, or only the cloud, doesn’t preclude DevOps. A DevOps mindset of development and operations working collaboratively towards the shared end goal of the highest quality software experience possible for users is also applicable in the context of hybrid and bare-metal server deployment. So while DevOps and cloud share a close relationship, it is not an exclusive one.
DevOps engineers and teams can also work together with site reliability engineers (SREs), with a well-defined and managed approach offering significant synergies.
When the term DevOps architecture is used it refers to the specific infrastructure created to support DevOps processes and practices across the different phases of an application’s life cycle. Part of that infrastructure is likely to consist of some of the tools mentioned in the previous section, while others are used in its creation.
Cloud platforms, virtualization, containerisation, microservices, CI/CD pipelines, security practices and Infrastructure as Code all typically come together in a DevOps architecture.
Containers, most often orchestrated by Kubernetes, are a key pillar of a DevOps architecture. Containers consolidate source code, configuration files, libraries, binaries, and all dependencies into a single package to quickly and reliably run an application. Packaging code modules within one or multiple containers allows for easy transportation between computing environments, like development, testing and production environment.
Containers insulate code from any differences in the operating system distribution, security policies, network topologies and underlying infrastructure, which is vital to smooth CI/CD pipelines and much of the other automation that DevOps introduces. By providing a self-contained virtual infrastructure (IaC), containers can run the code packaged within them smoothly in any environment.
Breaking an application down into smaller containerised modules known as microservices is also common to a DevOps architecture. Each microservice runs independently and is loosely coupled with other microservices, with which it communicates via APIs. This decoupling of features and functionalities has two core advantages which align with the goals of DevOps:
The DevOps approach is increasingly being extended to integrate security processes, practices and tooling and that is a trend that can be expected to strengthen as security grows as a priority for all software systems and applications. The integration of cross-team accountability for security has been termed DevSecOps.
If the goals of DevOps are deliver better quality software, faster, the goals of DevSecOps are to deliver more secure, better quality software faster.
The 2012 DevSecOps manifesto outlines three core principles of DevSecOps:
Understanding how DevOps is defined in the different contexts we have covered here, its goals and how they are achieved by the processes, practices and tools we’ve covered here is important for anyone in the IT and software development space. That holds true whether your role is directly connected to software development lifecycles or more loosely as a stakeholder in a technology-first organisation.
Why? Because DevOps is becoming as much of a technology standard as leveraging cloud computing and adopting Agile development practices. In fact, it’s becoming a standard as a direct result of those two trends. All three are not only here to stay for the foreseeable future but will become increasingly the default standards for contemporary software solutions.
K&C - Creating Beautiful Technology Solutions For 20+ Years . Can We Be Your Competitive Edge?
Drop us a line to discuss your needs or next project