What is DevOps? What are DevOps Principles? What are DevOps Tools?
DevOps, a portmanteau of “development” and “operations,” is a culture-shifting methodology designed to streamline the processes between software engineering and IT teams. DevOps was developed in 2007 as a way to un-silo the traditionally separate departments and to help address inefficiencies and lapses in communication between the two groups. DevOps combines important practices, like Agile, continuous delivery and automation, under one strategic development plan.
What is DevOps?
Imagine you’re working at a large tech company. Your company is competing with other major tech startups to push out the next groundbreaking software. The faster you go to market, the greater chance your company has at dominating the software space. Unfortunately, your company’s software product updates come once every few months (and maybe even once a year). Your quality assurance (QA) practices are long and drawn out. And, once your product actually launches, it’s filled with bugs and immediately breaks. You’ve lost the software arms race.
That was an all-too-familiar story for many tech companies until DevOps came around to completely upend the world of software development. DevOps, a combination of the words “development” and “operations,” is a culture-shifting software development methodology that un-silos the engineering department that writes the code and the operations and IT department that implements it. Let’s make it clear; DevOps isn’t one tool or one process. Rather, it contains a series of approaches, like Agile and site-reliability engineering, that help to shift development culture and blur the lines between engineering and IT teams.
Benefits of DevOps
- Faster time to market
- Increased inter-team communication
- Heightened transparency throughout development process
- A unified and shared set of team goals
- Finding bugs is easier and faster to correct
- Increased user satisfaction
- A more flexible team
Prior to the DevOps movement, engineers and operations teams were completely separate. Engineers worked strictly on developing the code for software and operations teams were tasked with keeping the individual applications running. Their paths did not cross. Their objectives competed with each other’s. Most importantly, their communications rarely crossed. The silo of two of a company’s most important teams led to incredibly long deploy times, shoddy QA and a lack of communication that resulted in failed product launches and millions of dollars of time and money wasted. Simply put, the old software development methodology was inefficient and riddled with issues.
DevOps came along in the late 2000s as a way to save the systems development lifecycle. The entire idea of DevOps is based on automating the processes between software development and IT operations teams, so they can build, test and release products faster and with fewer issues. DevOps isn’t a magical tool that can fix the issues currently plaguing a software release. Rather, it’s a cultural shift that promotes communication and fosters collaboration between very important stakeholders. The goal of DevOps is to make the development cycle efficient so that companies can make continuous product releases and upgrades without sacrificing quality. In short, DevOps can be summed up in five principles by using the acronym CALMS.
DevOps Principles: The CALMS Framework
The CALMS Framework was coined by DevOps Pioneer, Jez Humble, to determine how successful an organization would be at adopting DevOps. To achieve DevOps success, companies must be able to accommodate for five specific principles:
Companies that adopt DevOps must be able to cultivate a culture of collaboration. Engineers and IT operations professionals work in tandem, instead of competing against one another to reach certain metrics or achieve certain goals. Each group’s goals are better aligned and both teams work side-by-side in quality assurance testing. Working together allows the teams to quickly identify bugs, focus on solutions and implement quick fixes, all in the span of a few days (rather than a few months or not at all).
Automation is an important part of the DevOps methodology. Putting repetitive and repeatable processes in place helps to speed up work and create reliable systems. Continuous Delivery (CD) is an important part of the automation process. CD essentially means that engineering and operations teams are continuously testing code and deploying on a faster basis. Teams rely on a slew of CD softwares to help speed up the process. Instead of one gigantic deployment that takes months to deploy, continuous delivery relies on smaller, yet more efficient deployments. This reduces the risk involved and allows for development teams to stay on top of any fixes that need attention.
In terms of DevOps, “lean” means trimming the auxiliary parts of software development away, so only the absolutely necessary processes remain. A true DevOps mindset involves constantly tinkering with processes to make them as efficient as possible. Teams must have an agile-first mentality when crafting a product, meaning that they put out a simple product first and make continuous improvements to it in order to craft a perfect product a few months or years down the road. Because plans, technologies and teams tend to change quite often, taking a lean approach to software development means teams can shift priorities quickly without having the enhanced risk or waste that is involved with traditional methods.
It’s hard to measure improvements without metrics. DevOps employs a slew of tools and technologies that help measure performance and map out realistic KPIs. Common measurements taken in a DevOps environment are: How many tickets were being pushed per release? How many bugs did we find (and how long did it take to fix them)? How many total users were affected by bugs? What is our application’s response time? These questions (and many others) help keep teams on track and up-to-date on how they are progressing in their software development process.
Instead of having totally separate jobs, engineers and operations teams now share responsibilities. This sense of sharing a goal (and the challenges that come with achieving it) bridges divides between teams and promotes a culture of collaboration. The Sharing aspect of DevOps believes that the same people who build the application should also be the same ones to ship it and maintain it. Sharing fills in the gaps of the development process, and it ensures that all teams take a hands-on approach from start to finish.
The DevOps process thrives on the integration of different technologies to help automate processes and boost the quality of the final product. Below are just a few of the popular tools that most companies employ in their DevOps tech stack:
Git & GitHub
Git is one of the most popular tools in the DevOps world. Git is a source code management (SCM) tool that allows for full transparency and clarity into the development process. Git is a fantastic tool for coming up with different versions of source code, experimenting and then easily merging new features when ready to ship. GitHub is a complementary technology that acts as both a data repository and a networking tool for engineers. GitHub holds the open source code that was created with Git, and makes it accessible to a wide network of engineers.
Docker has become one of the top DevOps tools because it makes containerization a piece of cake. What is containerization? In containerization, each “container” includes all of the elements to create a product from start to finish. The traditional method of software development involved transferring code from a specific computing environment to a virtual machine or operating system. This would result in a variety of bugs and various problems. Containerization eliminates these problems by combining the code, with the various files, libraries and other tools that require a product to run. Containers stand alone from the host and become secured work environments that foster experimentation and reduce risk in the development process.
Jenkins is a software development automation tool that speeds up various processes in the development pipeline. Jenkins allows teams to fully customize their Continuous Integration/Continuous Delivery (CI/CD). Jenkins’ flexibility offers a variety of options that allow for development teams to tackle everything from building the product, to smoke testing it, in a way that makes the team feel comfortable and efficient. Additionally, another desirable feature of Jenkins is that it maintains more than 1,000 plugins that integrate with almost every other mainstream DevOps tool.
Kubernetes is a containerization tool, like Docker, that helps with containerization at scale. Kubernetes is useful for massive DevOps systems because it automates the management of hundreds of different containers at one time. For instance, instead of manually deploying hundreds of containers onto the same machine, Kubernetes allows for automating the times in which containers are deployed to avoid bogging down systems with too many deploys at one time.