What Is a DevOps Engineer, Exactly?
by YOSS Community Writer, on July 29, 2019 at 11:16 AM
DevOps is a portmanteau of development and operations. It is a field that acts as a bridge between those who create software (development) and those who use it (operations).
These two departments don't usually share incentives. Development likes to add new features to programs and operations generally wants stability. Additionally, when operations want new features, their desires don't necessarily get communicated effectively to development. Even when communication goes smoothly, the wait time can still be lengthy.
DevOps is meant to solve these problems. It is not, however, a new kind of department. Instead, DevOps engineers work in both departments. They create and use procedures that provide a constant flow of marginal software updates instead of infrequent large updates.
History of DevOps
The history of DevOps is open to debate just as different aspects of its definition are still argued over. That being said, most will agree that it began at the 2008 Agile conference in Toronto. Agile is an approach to software development where groups work together on iterative updates, and it’s still commonly associated with DevOps.
At the conference, IT consultant Patrick Debois presented Agile Infrastructure and Operations. He described exactly what DevOps would become over the next decade.
DevOps Is a Culture
You can think of DevOps itself as a culture and as a way of looking at the development process. Despite all the technical additions made by DevOps engineers (e.g., automation), the biggest problem is changing company culture. Development and operations need to move on from an adversarial relationship to a cooperative one where they are all part of the same team with the same goals.
Advantages of DevOps
There are many benefits of DevOps, including:
- Improves collaboration between development and operations
- Focuses the team on productivity and thus reduces costs
- Detects and corrects problems early
- Provides faster delivery of features with greater stability
Traditionally, the operational team may have dreaded major software updates and the disruption they caused. Under DevOps, the development and operations teams are working together on a daily basis.
According to the operation automation company Puppet, businesses that have DevOps departments deploy code vastly more often than businesses that don't. And since the deployments are marginal, such companies have 50% lower fail rates.
DevOps engineers also make wasted effort less likely because the constant development cycle means bugs are found early and before more code is built on top of them.
And finally, the constant development and testing means that new features can be released faster than ever.
DevOps tries to structure the software lifecycle in a constant state of activity and communication. This is called Continuous Delivery (CD).
- Continuous Development: Iterative software development designed to add features to software quickly.
- Continuous Testing: A system where builds are tested right away.
- Continuous Integration (CI): The process of quickly adding new code to builds.
- Continuous Delivery: The final step in this process where the software is released (although not necessarily publicly).
Note that CD is a name for the entire process as well as a part of the process. Related to this is Continuous Deployment, which is CD where the resulting code is pushed to a live server. CD is normally manually tested on a staging server first whereas Continuous Deployment is auto-tested and pushed live.
DevOps Engineering Tools
There is a wide variety of DevOps engineering tools, and they fall into several different categories.
Build and Integration Tools
The core task of continuous integration is keeping software builds up-to-date. This is accomplished with build automation tools.
- Jenkins: This is a server-based automation tool written in Java that helps with continuous integration. Builds can be automated with this tool. For example, this could be done after a new piece of software is committed in the version control system.
- Mavin: This tool is similar to Jenkins, but it is particularly known for its integration with the Apache web server.
Version Control Systems
Version control systems allow software changes to be managed. Just as important, they integrate with automated building systems to keep the software implementation constantly up-to-date.
Git is probably the most popular version control system. But others like Mercurial and the more traditional (non-distributed, single repository) SVN are also widely used. They are all supported by Jenkins and Mavin.
One of the needs of the DevOps environment is to quickly provision servers with varying configurations. Configuration managers allow this to be done at a high level without manually setting up servers.
In addition to automating server configuration, using these tools means that new members of the team don't need detailed knowledge of the servers being used. They just need to be familiar with the application itself.
Puppet and Chef are the two most popular configuration managers. The main difference between them is that Puppet uses a declarative language (e.g., XML) and Chef uses a Ruby-based imperative language.
Testing tools depend a great deal on the platform. The most popular testing automation tool is Selenium, which is focused on web applications.
Tricentis Tosca is an application designed specifically for continuous testing. It is used to test GUIs and APIs.
Often, software needs to be run in their own containers, which are basically an efficient virtual server that only runs the application.
There are two major tools related to this. First is Docker, which allows you to run applications in containers. Second is Kubernetes, which allows you to orchestrate and manage containers. They are both used by themselves and in concert.
Nagios is an infrastructure monitoring application. It alerts the user when there is a problem and when the problem is resolved. If the problem requires human attention, it can alert you to that as well.
DevOps Engineer Skills
DevOps engineers typically come from development backgrounds, but there are certainly those who come from operations. Beyond those two core disciplines, DevOps engineers require skills from other fields as well.
DevOps engineers are not programmers, but coding (or scripting) is often necessary. This is because DevOps engineers need to automate either directly or, more commonly, when using a tool to perform, for example, server configuration.
Without a strong system of continuous testing, there really is no DevOps. Engineers need to understand software testing so that they can effectively automate it and work with the testing team.
Because of the continuous flow of software updates, a thorough knowledge of software security is essential. This is not just a question of noticing security holes in a piece of code, either. DevOps engineers need to build security into the software lifecycle itself.
DevOps engineers work with all aspects of the infrastructure used for development, operations, and DevOps-specific tasks. It often expands from there and can include working with cloud service providers.
DevOps engineers need to be proficient in using the standard tools we discussed above. Of course, that doesn't mean knowing every single application.
For example, Vagrant allows users to build virtual machines to run applications in. With Docker, which we mentioned earlier, you create containers to run applications in. While they’re technically different apps, they’re used for the same purpose: running applications in specific environments. That shared usage makes it easy to learn one if you already know the other, if necessary.
In other words, engineers need to know how to use tools to solve the kinds of problems that DevOps requires.
DevOps engineers need more non-technical skills than what’s normally needed in development or IT. These skills include:
- Sociability: Being able to get along with a large and diverse group of people is essential because DevOps is based on the idea of getting development and operations to work together as a team. Facilitating understanding and communication can be critical to the job, especially where DevOps is new.
- Communication: Related to the above, they need to effectively communicate and listen to others.
- Creativity: When you’re running a constantly moving deployment system, you’re bound to face unique challenges. DevOps engineers need to be flexible in their thinking and be able to address problems in new ways.
- Proactivity: DevOps engineers can't rest with the status quo. They need to head off problems quickly and constantly find ways to improve processes.
DevOps has taken over much of the software development world and is already firmly established in giants like Google and Facebook. DevOps engineers are the focus of this bigger move toward continued, iterative software development.
If you're looking for a DevOps engineer, schedule a call with a YOSS advisor to get access to the very best talent.