The DevOps engineer is quickly becoming a critical and multifaceted role for leading-edge businesses. Without a clear path of advancement to the position, IT shops must identify the right combination of DevOps engineer skills in hires or experienced employees.
Businesses need high-level leadership for the successful convergence of software development, testing, deployment and ongoing operations as part of a continuous integration, continuous delivery/deployment or a DevOps initiative. A DevOps environment needs someone with specific skills -- including a holistic knowledge of collaboration and business practices -- to erase traditional silos, maintain and advance best practices in fast-moving software projects, and achieve the best business outcomes for the organization's products. This has led to the emergence of DevOps engineers.
The list of base requisite DevOps engineer skills is lengthy, and even more are necessary to master the role. While specific requirements vary between organizations, here are 10 skills -- ranging from highly technical abilities to "soft" people" skills – that employers look for in a DevOps engineer.
1. Platform familiarity
IT organizations are typically built around the idea of a stack -- the combination of prevailing operating systems (OS), services and associated tool sets to develop, deploy and support applications. There is often some overlap or cross-training between stacks. But the most successful and effective DevOps engineers have deep expertise in administering the stack that the business currently uses or plans to use. The three principal stacks are Microsoft Windows Server, Linux server distributions and a cloud structure.
The Microsoft stack typically includes OSes such as Windows Server 2016 and Windows Server 2019; management platforms such as System Center and its various iterations, including Operations Manager for system- and service-level monitoring and notifications; supporting applications such as MySQL, PostgreSQL or Mongo for a database, SharePoint for collaboration, and so on.
A Linux stack is based on the open source OS kernel and may involve several common Linux distributions such as Ubuntu, Debian and Fedora. It also includes many other open source tools, such as Ansible, Chef and Puppet, as well as open source frameworks, such as OpenStack, that support the creation of a private cloud. Strong knowledge of VM platforms, such as VMware's vSphere or Linux KVM, as well as container platforms like Docker, is also vital. Open source stacks have gained attention in recent years as the number of VMs and containers proliferate -- making licensing and software maintenance agreements costly.
Public cloud options include Microsoft Azure -- which can complement Microsoft stacks -- as well as Google Compute Platform and Amazon Web Services (AWS), which can complement Linux stacks. Going with public or hybrid cloud infrastructure requires a DevOps engineer to have a solid knowledge of the chosen cloud services, management options and cost structure.
2. Programming and scripting languages
DevOps practices vary between organizations, but ultimately, they involve getting code through development and into production quickly. DevOps engineers might not be writing low-level code, since that is usually left to development teams, but they'll need to understand the source code, develop scripts and tackle the integrations -- such as getting the code version to talk to the MySQL database -- to run deployments on the operations side. DevOps engineer skills should include knowledge of PHP, Python, Perl, Ruby and other programming languages. DevOps engineers also benefit from a background in continuous integration management tools such as Jenkins, Apache Maven or Apache Ant.
3. Configuration management, version management and infrastructure as code
Speed and fluidity are the hallmarks of a DevOps culture code is always changing, and it takes sound collaboration and version management skills to assess ever-changing user requirements, assemble the correct components and craft a release that runs. DevOps engineers work with tools such as Git, Perforce and Apache Subversion for repository (or repo) control. To better deploy this ever-changing code, many DevOps engineers embrace configuration management, which is almost always automated to accelerate the pace of version releases. Tools such as Puppet, Chef and Vagrant provide these capabilities, as do cloud providers' native tools, such as AWS CodePipeline or CodeDeploy. They also use infrastructure as code (IaC) to automatically create infrastructure from code. Typical tools for IaC include AWS CloudFormation, Ansible, Chef, Puppet, SaltStack and Terraform.
4. Provisioning and deployment
DevOps engineers don't just shepherd code through development; they provide the bridge needed to facilitate those releases on the operations side. This means they require skills in the realm of IT hardware and infrastructure -- from servers and storage to networks and OSes. Because DevOps engineers know the entire IT stack, they can guide the provisioning and deployment of each release in the local data center or the public cloud. This know-how usually extends to creating and maintaining reliable and highly available services.
DevOps engineers play an increasingly important role in enterprise security, both in development and operations. On the development side, DevOps teams must create secure code, be conscientious of open source software, perform vulnerability testing in the CI/CD pipeline and more. On the operations side, a DevOps engineer must implement security practices such as encryption for data at rest and in flight. This responsibility can overlap with more formal security tasks, such as managing antimalware and intrusion protection platforms.
6. Tracking and assessing release performance
A DevOps engineer is the consummate consultant, someone who can objectively evaluate the performance of each release, make required adjustments to provisioned resources and platforms, and use various tools to measure workload performance. In addition, engineers must analyze log results, derive relevant key performance indicators and then share that content with the entire staff to enhance future software iterations. Tools such as Nagios, Zabbix, Sensu, Amazon CloudWatch, Splunk and Relic can monitor application performance locally and on public cloud platforms. Performance management may also extend to issue tracking and help desk support to prioritize tickets and investigate complex problems.
7. Network optimization
Modern enterprise workloads rely on network resources and security, so DevOps engineer skills should include extensive knowledge of networks and network interfaces, as well as an understanding of the workload bandwidth requirements. Network knowledge also involves a strong emphasis on security, including the deployment and management of VPNs and the use of software-defined networking for container-centric tasks such as microsegmentation.
DevOps engineers are routinely involved in everyday operations, and it's common to expect such high-level professionals to offer substantial problem-solving support for help desk and other staff -- especially related to specific DevOps workloads in the deployment pipeline. This can include remote deployment and support tasks, such as deploying, managing and troubleshooting workloads that run at remote or hosted locations. Troubleshooting can also extend to more traditional parts of business infrastructure, such as the remediations of server, storage and network issues.
Making the journey
Ultimately, the real challenge of being a DevOps engineer is getting there in the first place. There is currently no formal career path and the list of skills is long. Formal education is rarely delineated in DevOps engineer job postings. Instead, the focus is on practical knowledge and experience. Consequently, a DevOps engineer isn't made -- such a person evolves and grows into the role with hands-on experience, usually starting out as an IT pro with a strong interest in coding, or as a developer invested in code testing and deployment.
Modern software is more about integrating platforms and services than writing low-level code. For example, nobody creates messaging or database functionality today -- the code integrates to existing platforms such as Exchange, SQL, Redis or countless other third-party or open source business applications that use common APIs. These platforms are usually part of the business stack, but engineers should know how to use them. For example, if the business ties a software product to a SQL back end, a DevOps engineer should have the skills to set up the database and make complex SQL queries.
10. Communication and team management
DevOps engineer skills are not just technical. Somebody in this role must be an expert communicator who is also a capable manager, one who can talk the talk, walk the walk and see the point of each team -- and then bring those disparate professionals together in a productive manner to ensure rapid continuous development that will achieve the best business results.
With so many people and competing interests involved in the DevOps process, there are countless technical and professional problems that will inevitably arise over time. Those include interpersonal conflicts, changing roles and responsibilities within the organization and broken business processes. A DevOps engineer must assess these situations and seek constructive solutions that will achieve goals while keeping constituents happy. For example, if a release cycle is delayed by inefficient manual steps, a DevOps engineer can make a technical and business case to invest in automation.
The state of the DevOps movement for developers