The Skills You Need to Excel in a DevOps World
In the everchanging world of cloud computing, there’s a constant blizzard of buzzwords filling our feeds and inboxes. Of course, many of those terms have fundamental importance beyond the hype.
One of them is “DevOps”; in fact, there are even job postings for “DevOps Engineers.” However, this raises the question – what does it take to be a successful DevOps engineer? What DevOps skills do engineers need? We’ll try to answer that question in this blog. But first, we need to be clear about what DevOps is.
What is DevOps?
At its core, DevOps is a set of cultural practices followed by software development and IT operations teams (Dev teams and Ops teams) to achieve common and shared goals for an organization. It aims to break down the barriers between Dev teams and Ops teams, often due to misaligned goals and incentives.
These cultural practices are typically described through a set of pillars and a lifecycle. Breaking it down, let’s take a look at those pillars and the lifecycle to help answer our main question.
The “pillars of DevOps” are those key elements that characterize it. While different thought leaders in DevOps have different lists of pillars, the following four repeatedly appear:
- Culture – an organizational commitment to collaboration and good communication
- People – the soft skills needed to achieve shared responsibilities
- Automation – using tools to reduce human error in repeated tasks
- Measurement – the practice of documenting and measuring leading to improvement
The Culture and People pillars intricately connect with an organization’s general culture. Specifically, for DevOps to be successful, there needs to be buy-in within the C-suite.
The DevOps Lifecycle
In the DevOps lifecycle, a software application journeys through seven phases, which are summarized below:
- Plan – determine business value, technical specifications, release plan
- Create – design and code, check the build’s performance
- Verify – test design adherence, code quality, security, compliance, performance
- Package – pre-production phase
- Release – co-ordinate the release plan and schedule
- Configure – set up the production infrastructure
- Monitor – collect performance data and customer feedback
The DevOps Lifecycle and Pillars Work Together
For most people working in a DevOps environment, the lifecycle appears to be more critical than the pillars. That’s because your daily work focuses on completing this task or that task. It’s easy to align those tasks with a lifecycle phase (verifying code, monitoring application performance, etc.) You can even categorize many functions with the measurement or automation pillars. Still, it’s challenging to see how code testing or performance monitoring relates to the culture or people pillars.
Nevertheless, everyone working in a DevOps environment needs to understand the foundations of the pillars and the lifecycle. Without that big picture view, you’ll get lost in your task list, and the organization will lose the value and benefits of a DevOps culture.
Furthermore, you’ll notice that of the four pillars, two are technical, and two are non-technical. Maybe our successful DevOps engineer needs a mix of technical and non-technical skills? Perhaps you’re right! The DevOps skills needed include both soft and technical.
DevOps Skills – Soft
Let’s start with the soft DevOps skills, which relate to the culture and people pillars. Following is a selection of soft critical skills that the successful DevOps engineer needs. It’s not exhaustive, but it’s a good start.
Systems thinking focuses on the entire system’s performance rather than on one aspect or the whole organization’s performance rather than one team only. It reinforces the collaborative nature of DevOps.
Systems thinking is the attitude behind Dr. W. Edward Deming’s quote: “Quality is everyone’s responsibility.”
The successful DevOps engineer needs to understand where their role fits into the whole system and how their work supports that system’s goals. This leads to higher individual productivity within the purposes of the entire team and the organization.
Amplify Feedback Loops
When process A causes a change to process B, it will loop back and push A to be changed as well, hopefully for the better!
This is a feedback loop.
For example, automated verification and deployment allows us to get customer feedback quickly and regularly. That feedback needs to be looped back to the appropriate team for action and improvement. The same principle applies to two applications or two teams. A healthy DevOps environment encourages feedback loops, so the successful DevOps engineer needs to give and healthily receive feedback and make adjustments.
The idea here is to foster a culture that encourages continuous experimentation, as it’s vital for learning and improving. Both Dev teams and Ops teams should take risks and learn from their successes and failures. Of course, this must be led by team leaders and management. Experimentation must also relate to organizational goals. Our successful DevOps engineer needs to carve out time to try new things, report on the results, and make changes.
Outcomes Over Output
DevOps focuses on outcomes over output.
What’s the difference?
Output is the velocity of new releases, the number of new features, the number of support tickets resolved. Outcomes are the internal and external gains achieved from those outputs. Internal outcomes may include reduced deployment issues or improved deployment frequency, while external outcomes may increase customer satisfaction. Of course, outputs and outcomes link inextricably, so the key here is in focus and attitude.
No Blame Culture
When developing and deploying increasingly complex applications, the risk of “stuff” happening also increases. Indeed, everyone should be striving for high-quality work. But when something goes wrong, is your first thought, “Whose fault is this?” or “How can we solve this problem?”
Blamestorming is fruitless and wasteful.
The successful DevOps engineer needs to adopt a “no blame” mindset. Errors in large and complex systems do not require a name to blame; they arise from multiple factors and need to be solved.
DevOps Skills – Technical
Of course, soft skills alone will not make anyone into a successful DevOps engineer. Maybe a sales associate, but not an engineer. So, what technical DevOps skills do our engineers need to develop?
Foundational IT Skills
To begin with, foundational skills in coding, networking and operating systems are a must.
Coding skills are an obvious need on the Dev side of DevOps, but they are essential on the Ops side for a couple of reasons. First, learning to code enables Operators to grasp the issues that Developers deal with. Second, coding skills come in very handy when automating infrastructure (more on that below). Java, C++ and Python are all useful for building coding and scripting skills.
Similarly, networking skills are an obvious need on the Ops side. Still, as more and more applications run in highly networked environments, they have become important on the Dev side. Understanding TCP/IP basics and working with standard protocols and services like DNS and DHCP are advantageous. And don’t forget basic security standards like HTTPS and SSH as well.
Operating systems are another vital skill set, especially with a Linux CLI. Experience with file systems and I/O management, as well as basic server configuration, is precious. Working with a web server like Nginx is helpful, as you can see your configurations’ results quite easily.
There is a vast array of useful resources to help you learn the basics of coding, networking and operating systems. A quick search on the web should generate multiple options for you to explore.
Virtualization and Containerization
Virtually everything about cloud computing requires virtualization (funny, eh?).
There are multiple free hypervisors that you can install on a laptop and use to learn the basics about virtualized infrastructure (CPUs, RAM, storage, networking, etc.) But in the past few years, virtualization has been extended into containerization. In some places, Docker and Kubernetes have become household words (well, maybe not in your household). Containerization is essential to ensure consistency across development environments and achieve a key DevOps goal of multiple stable releases every day.
Not sure what containers are? Check out our previous blog here.
Infrastructure as Code
Automating the creation and configuration of virtualized infrastructure gives cloud computing power. This is where coding, networking and OS skills converge together. Treating your Infrastructure as Code (IaC) allows you to manage that infrastructure by writing and executing code to generate service components such as virtual machines, networks, etc. Two of the main benefits of the IaC approach are:
- your changes become routine
- you can manage IaC files using familiar source control processes.
The two main classes of IaC tools are provisioning and configuration management.
Provisioning tools focus on creating virtual “objects” like VMs, containers, storage, and virtual routers. You can create reusable templates to set up pre-defined sets of objects again and again. Configuration Management (CM) tools focus on installing applications and otherwise configuring the infrastructure you just created.
For example, to create a virtualized Nginx web server, you need a provisioning tool to create the VM and then a CM tool to install, configure and start Nginx. Terraform is an excellent provisioner, and Ansible is an excellent CM tool.
CI/CD is a set of automation practices closely tied to both DevOps and IaC, as suggested below.
CI stands for Continuous Integration (in the Create and Verify phases). CD can mean either Continuous Delivery (in the Verify and Package phases) or Continuous Deployment (in the Verify, Package, Release, and Configure phases).
Continuous Integration is the practice of making multiple incremental builds every day through automation. The main code branch is maintained through frequent commits and merges, which requires a significant amount of automated testing. Two key benefits of Continuous Integration are a reduction in errors and increased speed of release.
Continuous Delivery comes after Continuous Integration by delivering updates to customers in a rapid, repeatable manner. Continuous Delivery typically focuses on small releases and leverages containerization for packaging before being deployed to the staging or production environment.
Continuous deployment extends Continuous Delivery into the Ops side for fully automated release and configuration of the application. It involves automating the code verification process, packaging the code in a container, and deploying it to production. Continuous deployment may also include configuration management.
Essential CI/CD tools to investigate include:
- GitHub for the Create phase
- Selenium for the Verify phase
- Jenkins for the Package phase
- CircleCI for all of the Create, Verify and Package phases
- Docker for the Package phase
You can find all of these tools and more through the Cloud Native Computing Foundation’s Cloud Native Interactive Landscape page.
The basic concepts of cloud computing have become well known, whether private vs. public cloud or “[Fill-in-this-blank] as a Service.” But suppose you want practical skills in creating a cloud instance (a VM) or deploying a Virtualized Network Function (VNF). In that case, you need to choose a platform, whether it is AWS, Google Cloud Platform, Microsoft Azure or OpenStack. However, the experience gained on any platform has some amount of transferability to other platforms. And each provider will cheerfully provide you with training on the specifics of their version of cloud computing.
In conclusion, a DevOps environment requires professionals to have a unique mix of technical and soft skills. The technical skills are more comfortable to define, and they’re certainly needed as we continue to innovate in cloud, automation and related technologies. But don’t forget or underestimate the importance of the soft skills necessary to break down silos between teams and help create the organizational culture that is the proper foundation of DevOps.
New to DevOps and looking to learn?
Check out CENGN Academy’s Introduction to DevOps Course at uOttawa’s Professional Development Institute.
Increase Your DevOps Knowledge