DevOps requires a variety of skills and competencies to realize the full benefits of the methodology. The most pertinent DevOps skills are needed in the disciplines of system administration, security, software development, delivery automation, and quality assurance. It is not feasible or practical for a single person to accomplish all these things quickly as a result. We will take a look at some of the skills that are important in DevOps in different areas to provide a little more focus. If you are a business leader looking to improve your team's performance, this is an excellent starting point.
Lets take a look at some of the top DevOps skills that you should be looking to acquire in the year 2022!
Top Technical DevOps Skills
Linux administration is important for devops because Linux is the most commonly used operating system for web servers and cloud infrastructure. DevOps practitioners often use Linux systems to deploy and manage applications, and knowledge of Linux administration is necessary for tasks such as configuring and maintaining servers, automating deployment processes, and monitoring the performance of applications. Additionally, many of the tools commonly used in DevOps, such as Git, Jenkins, and Ansible, were developed for Linux systems and have better support on Linux than on other operating systems.
Configuration management (e.g. Ansible, Chef, Puppet)
Configuration management is an important skill for devops because it allows for automated and consistent management of infrastructure and applications. By using configuration management tools such as Ansible, Chef, and Puppet, a devops practitioner can ensure that all servers in a system are configured in the same way and that any changes made to the configuration are tracked and can be rolled back if necessary. This helps to prevent configuration drift, which can lead to inconsistent behavior and increased risk of errors. Additionally, using configuration management tools can greatly simplify and speed up the process of provisioning new servers and deploying new applications. This is essential for organizations that need to scale their infrastructure quickly and efficiently.
Scripting (e.g. Bash, Python)
Scripting is an important skill for devops because it allows for the automation of repetitive tasks and the creation of custom tools. By using scripting language such as Bash and Python, a devops practitioner can automate tasks such as server provisioning, application deployment, and system monitoring. This allows for faster and more efficient management of infrastructure and applications, as well as reducing the risk of human error. Additionally, scripting can also be used to create custom tools that can help to automate complex workflows and integrate different systems. This allows for greater flexibility and control over the infrastructure and can lead to more efficient and effective operations. Furthermore, scripting is a key skill for many automation frameworks, such as Ansible and Jenkins, that are commonly used in devops.
Continuous integration and delivery (e.g. Jenkins, Travis CI)
Continuous integration and delivery (CI/CD) is an important skill for devops because it enables teams to quickly and efficiently release new features and bug fixes to customers. By using tools such as Jenkins and Travis CI, a devops practitioner can automate the process of building, testing and deploying code changes. This helps to catch and fix errors early in the development process and allows for faster delivery of new features. Additionally, using a CI/CD pipeline also ensures that all code changes are thoroughly tested and validated before they are deployed to production, which helps to reduce the risk of errors and improve the overall quality of the software. Furthermore, CI/CD practices enables teams to move away from a traditional model of infrequent, large releases and towards a more agile, iterative development process. This helps to reduce lead time, increase efficiency and provide faster feedback to the development team.
Containerization (e.g. Docker, Kubernetes)
Containerization, through tools such as Docker and Kubernetes, is an important skill for devops because it allows for the packaging and deployment of applications in a lightweight, portable, and consistent manner. This can improve the scalability and reliability of the application by allowing it to run consistently across different environments. Containers provide a consistent and isolated environment for the application to run, independent of the host system. This helps to minimize the differences between development, testing, and production environments, which can reduce the risk of errors and make it easier to deploy and manage applications. Additionally, containerization allows for more efficient use of resources, as multiple containers can run on the same host, and can easily be scaled up or down as needed. Furthermore, container orchestration tool such as Kubernetes, allows for automating the deployment, scaling, and management of containerized applications, which is essential for the efficient management of modern, cloud-native applications.
Cloud infrastructure (e.g. AWS, Azure, Google Cloud)
Cloud infrastructure, through platforms such as AWS, Azure, and Google Cloud, is an important skill for devops because it allows for the deployment and management of applications and services on a large scale, with high availability and scalability. Cloud infrastructure allows organizations to leverage the resources of a major provider, rather than having to build and maintain their own servers and data centers. This can reduce costs and improve the speed at which new resources can be made available. Additionally, cloud infrastructure can provide many additional services such as load balancing, storage, databases, and security features that can be easily integrated with your applications, improving their availability and scalability. Furthermore, cloud infrastructure can provide tools for monitoring and automation that can be used to manage and optimize the performance and cost of applications. This is essential for organizations that need to scale their infrastructure quickly and efficiently, and for those that want to take advantage of the benefits of cloud computing such as scalability, cost-effectiveness and flexibility.
Networking and security
Networking and security are important skills for devops because they are critical for the overall performance and security of the infrastructure and applications being managed. A good understanding of networking concepts such as routing, switching, and load balancing is essential for properly configuring and maintaining the infrastructure that supports an application. Additionally, knowledge of security concepts such as firewalls, encryption, and access controls is necessary for protecting the infrastructure and applications from unauthorized access and data breaches.
DevOps practitioners are responsible for ensuring the availability and performance of the systems they manage, and a good understanding of networking and security is necessary to identify and troubleshoot issues that may arise. They also need to be able to design and implement network and security solutions that meet the needs of the organization, while also complying with any relevant industry regulations or compliance requirements.
Networking and security are critical aspect of the infrastructure, and a failure in one of these areas can have a severe impact on the availability and security of the application, and can lead to business critical issues. As such, it is important for devops practitioners to stay up-to-date with the latest networking and security technologies and best practices in order to effectively design, implement, and manage secure and performant systems.
Monitoring and logging (e.g. Nagios, ELK)
Monitoring and logging are important skills for devops because they allow for the collection and analysis of data about the performance and behavior of the infrastructure and applications being managed. This can help to identify issues early on and prevent them from becoming major problems.
Tools such as Nagios and ELK (Elasticsearch, Logstash and Kibana) enable devops practitioners to monitor the performance and availability of servers, applications, and services, and to receive alerts when issues arise. This allows for quick identification and resolution of problems, improving the overall availability and performance of the systems. Additionally, log data can be used to troubleshoot issues, track down the root cause of problems, and improve the security of the systems.
Monitoring and logging data can be used to gain insights into the usage and performance of the systems, and can be used to make data-driven decisions about scaling, optimization, and capacity planning. This is essential for organizations that need to scale their infrastructure quickly and efficiently, and for those that want to take advantage of the benefits of cloud computing such as scalability, cost-effectiveness and flexibility.
Git and version control
Git and version control are important skills for devops because they provide a way to track, manage and collaborate on changes to the codebase and infrastructure. Git is a distributed version control system that allows multiple developers to work on the same codebase simultaneously without conflicts. It also allows for versioning of the codebase and it allows to easily go back to a previous version if needed.
In a DevOps environment, the use of version control systems like Git enables teams to maintain a clear and accurate history of changes to their codebase, which can be used to identify and troubleshoot issues, collaborate on new features, and maintain a consistent and stable codebase. It also enables teams to work on different branches of the codebase, and merging them together when they are ready, which is important for maintaining a stable production environment and being able to rollback changes if needed.
Git and version control systems provide a way to automate the deployment process. By integrating Git with tools like Jenkins or Travis (GitOps), teams can automate the process of building and deploying code changes, which can help to catch and fix errors early in the development process and allows for faster delivery of new features.
Problem-solving and troubleshooting
Problem-solving and troubleshooting are important skills for devops because they are essential for identifying and resolving issues that arise in the infrastructure and applications being managed. DevOps practitioners are responsible for ensuring the availability and performance of the systems they manage, and a good understanding of problem-solving and troubleshooting is necessary to identify and resolve issues that may arise.
Effective problem-solving skills involve being able to identify the root cause of an issue, and to develop and implement a solution that will resolve the problem. This may involve using monitoring and logging tools to gather data, researching possible solutions, and collaborating with other team members to find a resolution.
Troubleshooting skills involve being able to quickly identify and diagnose issues with the system, and then to take appropriate action to resolve the problem. This may involve using tools and techniques such as log analysis, debugging, and network packet capture to identify the cause of the issue.
In addition, DevOps practitioners need to be able to work independently and in a fast-paced environment, to handle multiple tasks and projects simultaneously, and to be able to prioritize and manage their workload effectively. They need to be able to think critically, troubleshoot and resolve complex issues, which requires a high level of analytical, technical and problem-solving skills.
Automation and efficiency
Automation and efficiency are important skills for devops because they help to reduce errors, improve the speed and consistency of tasks, and allow teams to focus on more high-value activities.
Automation allows for the use of scripts and tools to automate repetitive tasks, such as provisioning servers, deploying code changes, and scaling resources. This can help to reduce errors that can occur when tasks are performed manually, and can also improve the speed and consistency of these tasks. Additionally, Automation is important for scaling and optimizing resources which can improve the performance, availability and security of the systems.
Efficiency is important because it helps to optimize the use of resources, reduce waste, and improve the overall performance of the systems. This can include things like optimizing the use of network bandwidth, reducing the number of servers needed to support an application, and automating manual tasks to reduce the time required to complete them.
Automation and efficiency skills are important for devops practitioners because they allow them to focus on more high-value activities such as improving the performance, security, and scalability of the systems, and also for being able to respond quickly to changing business requirements.
Communication and collaboration
Communication and collaboration are important skills for devops because they help to ensure that all team members are aware of the goals, progress, and challenges of a project. Additionally, they are essential for coordinating the efforts of different teams and departments, and for ensuring that everyone is working together towards a common goal.
Effective communication is essential for devops practitioners to be able to explain complex technical concepts to non-technical stakeholders, and to communicate the status of a project or incident to all relevant parties. This ensures that everyone is aware of the goals, progress, and challenges of a project, and that any issues are identified and addressed quickly.
Collaboration is important because it allows for the sharing of knowledge, ideas and resources among team members, which can lead to more efficient and effective problem-solving. DevOps teams often involve a diverse group of individuals with different backgrounds, skills, and areas of expertise, so collaboration can be crucial for ensuring that all team members are able to share their ideas and contribute effectively to the project.
In addition, DevOps practitioners need to be able to work effectively with other teams and departments, such as development, operations, and security, to coordinate the efforts of different teams and departments, and ensure that everyone is working together towards a common goal.
Agile and Scrum methodologies
Agile and Scrum methodologies are important skills for devops because they provide a framework for managing and delivering software projects in a rapid, flexible and collaborative way.
Agile methodologies, such as Scrum, are designed to be flexible and responsive to change. They focus on delivering small, incremental changes to the codebase, and on gathering feedback from users and stakeholders at regular intervals. This allows teams to identify and address issues early in the development process, and to make adjustments as needed to ensure that the final product meets the needs of the users.
Scrum is a specific Agile methodology that provides a framework for managing and delivering software projects in a collaborative and efficient way. It uses a set of roles, ceremonies, and artifacts to organize the work of the team, and to ensure that everyone is aware of the goals, progress, and challenges of the project.
In devops, Agile and Scrum methodologies are important because they allow teams to deliver code changes and new features quickly, and to gather feedback from users and stakeholders regularly to ensure that the final product meets the needs of the users. Additionally, it allows teams to work in an iterative and incremental way, which can improve the speed, quality, and predictability of software delivery.
Databases (e.g. MySQL, MongoDB)
Databases are important skills for devops because they are a critical component of many software systems, and a deep understanding of them is necessary for managing and maintaining those systems.
Databases are used to store and manage large amounts of data, and are a fundamental part of many software systems. They are used to store and retrieve data for web applications, mobile apps, and other types of software. Therefore, a good understanding of databases is necessary for devops practitioners to be able to manage, maintain and troubleshoot these systems.
Additionally, Databases are also important for performance, scalability and security of the systems. It requires knowledge of database design, indexing, query optimization, data replication, backup and recovery, and how to scale databases to handle large amounts of data and traffic.
DevOps practitioners with knowledge of databases can use various tools and technologies such as monitoring, profiling and tuning tools to optimize the performance and scalability of the databases. They can also implement security measures to protect sensitive data, such as encryption, access controls, and network segmentation.
Virtualization (e.g. VMware, VirtualBox)
Virtualization is an important skill for devops because it allows for the creation of multiple virtualized environments on a single physical machine, which can improve the flexibility, scalability, and cost-effectiveness of the systems.
Virtualization technology, such as VMware and VirtualBox, enables the creation of virtualized environments, known as virtual machines (VMs), which can run their own operating systems and software. These VMs can be created, configured, and destroyed as needed, providing a flexible and cost-effective way to manage resources.
In devops, virtualization is important because it allows teams to create, manage and scale multiple environments on a single physical machine, which can improve the flexibility, scalability, and cost-effectiveness of the systems. This can be particularly useful in development and testing environments, where teams may need to create multiple instances of an application or service in order to test different configurations or scenarios.
Additionally, virtualization can also be used for disaster recovery, by creating backups of the VMs and quickly restoring them in case of an outage.
Top Role Based DevOps Skills
Top DevOps Skills for Everyone
No matter where you are in your career, everyone could do with a little polishing on their communication and collaboration skills. People build and run technology and machines do what they are told to do. Remember, at the end of the day, technology is built by people for people.
Another area to polish right along with communication and collaboration is creativity. We are out trying to solve complex technical problems which require time to think and time to reflect. Building a mental model of your problem while looking for a creative solution is a good first step. Getting your creativity out to the masses, or colleagues is the next step. Do not worry about how your creative ideas will be received because you miss 100% of the shots you don't take.
I think the final DevOps skill is knowing when to hold'em and know when to fold'em. Not every idea, approach, strategy, or moment of self-indulging brilliance is going to be a winner. It is ok to look at something you are working on and throw it in the trash. It is also ok to take feedback from your peers on your ideas and be constructive with the feedback.
Every technology effort relies on systems and system administration to function. Regardless of whether you're creating serverless lambda functions or maintaining a static HTML website like this one, system administration is important to every technological endeavor. A Robust set of DevOps skills ensures that you remain competitive. It is the essential lifeblood of technology.
On-Prem System Administration
On-Prem administrators should be looking at skills that help reliably create interfaces that can be leveraged for quick environment standups. By creating more automated or scripted actions, those actions can become far more reusable than accomplishing the task once through a GUI.
In a more traditional approach, when a database administrator needs more disk space they would log a change ticket. That ticket would hit the system admin group which would open a change ticket with the SAN team. The SAN team would then review their allotments and take the ticket to CAB. That ticket would get approved, space would be released which would then go back to the system admin team to expand the disk after it goes through its CAB approval process. Finally, the database admin would then be able to go through their CAB to adjust SQL parameters to account for the new space.
THIS IS SLOW, not to mention soooo 1990s!
Unless you are in the mainframe market, most technology vendors are now exposing APIs which can be utilized to configure their systems. As an on-prem system administrator, you should be building your technology stack out in a way that you can expose DevOps tool like Ansible to the consumers of the infrastructure to safely self-service their requests. If a DBA needs more disk space, it should be as simple as updating some YAML and that space is provisioned and ready for use.
Focus more on SLA management than pure system administration. Designing systems to achieve specific SLAs is going to be a lot more valuable to the teams you work with than managing capacity numbers. If you are building your automation correctly, the automation itself can also understand the SLAs and ensure that people do not violate them with their configuration changes.
Finally, focus on developing or integrating directly into an observability stack. The more data that is visible to teams the better decisions can be made on how to optimize their current stance.
Cloud System Administrators
Cloud System Administrators should be focused on developing and making available sane cloud baselines. Just because you are the system administrator does not mean that you need to hold the keys to the kingdom when it comes to the cloud. In my experience, the cloud is a toolbox full of tools and when a more junior team tries to utilize the cloud, they view all of those tools as hammers. By providing sane baselines which consumers can pick up and utilize in the cloud, your teams are going to become a lot more efficient.
The key areas of focus here are going to be automation and security. Out in the cloud, the security perimeter is much wider than it is in the on-prem space. Providing sane defaults to end users lets you understand what the preset patterns look like. Through the mountain of data that the cloud provides, analysis can then be done with persistent feedback when one of those ordained patterns changes.
When it comes to automation, there should not be a huge barrier to entry between when someone receives their cloud account and when they start to produce technology. Service catalogs and pre-built playbooks with very well-documented parameters are a great way to kickstart a project and grow DevOps skills on a team. Once you are able to do that, you can then create automated building blocks that allow the team to get into production faster and build out the infrastructure which is required for their project.
Security / DevSecOps
In a more traditional world, Security is going to be proactively scanning digital assets with tooling waiting to deploy from their stealthy helicopters when an incident occurs. Security was viewed as a cost of doing business when in reality it should be viewed as an enhancement to the flow of delivery while lower the overall risk of costly delays or worse, security incidents. When embracing a more DevOps-focused skillset, security can integrate right into the overall delivery flow to ensure quality, speed, and transparency to stakeholders.
The first DevOps skills that security professionals should bring to the table center around integration to routine scanning tools. It is one thing to kick off a scan on an environment when something is deployed to production, but that may not prevent something from making its way into the wild which could have a lasting impact on digital properties. As part of the release pipelines that the team is using, security tooling should be integrated directly into the release structure and used as a quality gate.
When working with other teams, security should be able to provide automated testing suites. A certain type of testing should be performed, not one that verifies whether the automated tooling is working properly, but one that evaluates whether the code being developed is either hardened or tested with a focus on security.
Example: When developing or maintaining programs teams must continuously test for scenarios where unauthenticated sessions allow for access to data that requires authentication. This testing path may not be in the original requirements material, so it may not get tested as part of a normal feature release.
Another DevOps skill that security professionals should focus on is continuous feedback. Getting information back into the hands of the teams delivering features is paramount to keeping a system safe. If the individuals writing code or working on infrastructure do not know that they are ending up in a compromised state as early in the pipeline as possible, there is a very good chance that code will end up in production and someone with malicious intent will find it.
The last DevOps skill is a soft skill centered around communication. When working through trying to bring a more robust security posture to a team, decision-makers are left with a numbers game of risk management instead of understanding how security can help enhance their product. Tailoring communication around security in a way that stakeholders and decision-makers understand the benefits of security outside of the normal gloom and doom rhetoric will help open doors for bringing in more advanced tooling and methods.
Software developers are generally concerned with producing the next feature and getting that out into the market for consumption. The code is pushed and it ends up going through whatever gates may live between their keyboard and production. Occasionally they are going to get something kicked back which needs to get fixed and re-pushed.
To start developing some DevOps skills, I would take a look at how you are engaging this cycle. One of the core tenants of a DevOps flow is "Always be ready to release to production". This really means that the main branch needs to be ready to be pushed to production at all times.
Feature flags can be used to write and deliver code that is ready to be turned on in production via a configuration switch. By wrapping your code paths in feature flags, you can take time to incrementally work through your code and automated testing and flip it on in production when the time is right. Since we are mere mortals working on highly precise machines trying to get them to do our bidding, this is a great way to get incremental feedback on your approach both from our machine overlords along with other stakeholders.
Lastly, I would take a strong look at how to develop some DevOps skills around application building and packaging. Composing your application to be low touch, small, and quick to deploy and tear down will really help your peers reduce the complexity of their accompanying pipelines and work. A hot topic is microservices, but I don't buy that microservices are the only way to do this. I think a logical composition of your application by defining your data domain is a great way to understand the definable boundaries of what your application should be doing vs what another application may be responsible for.
This discipline is going to be taking on a lot of different challenges from different DevOps skill sets. You will be releasing new or updated applications, new or updated data or data schemas, new configurations, security updates, firewall rules, and many more disconnected technologies.
Start by working through a specific domain like application releases. Getting into containers in Kubernetes is great, but you can focus on server-based deployments as well. The gold standard is immutable deployments, but not every situation will fit immutable deployments.
Ensure that you are able to both deploy an application along with being able to completely remove all traces of that application from the deployment target. Successful deployment along with successful removal should give you the full scope of understanding the application that you are working with
Next, I would look at credential management strategies. Putting plain text passwords in code is a cardinal sin in today's ecosystem. Work on strategies that can provide the teams around you with a good interface for utilizing credentials without exposing them. I personally like using Ansible Vault as a solution here where ansible is a trampoline to a more robust credential storage solution.
The last DevOps skill that I would build is around deployment validation. If you are not able to tease out clear requirements around a successful deployment, that is ok. Work towards getting deployment validation built into your pipeline in a rudimentary way such as doing a GET call to the deployed application. As failures occur, harden your validations with more steps like running a search or calling a page that makes a database query to ensure that you could trigger a rollback if things are not working as expected.
Quality is DevOps and DevOps is focused on quality. Quality assurance teams will traditionally look at the functionality of the application to give it a clean bill of health before release. I would urge QA teams to broaden their horizons and bring QA practices into all phases of the delivery cycle.
A key focus of DevOps is the observability of an application. If QA teams work towards building DevOps skills around automated testing, you now have a nice monitoring suite that you can use to ensure the persistent quality of production assets. automated testing is also a great way to provide feedback to the team. Make sure automated testing is accessible and ready for consumption by the whole team since quality is everyone's responsibility.
Next, I would look at building some DevOps skills around providing quality for free through frameworks. There are many different edge cases out there that can be easy or difficult to test for. Building out or deploying frameworks that test for standard application edge cases is a great way to empower the team with quick feedback on development to know that baseline quality standards are met. I know that I never want to write another test that checks to see if an email address was put into the email field ever again.
As you can see above, a wide range of DevOps skills is needed in the automated delivery space. Teams are composed of many different disciplines to be self-sufficient in their delivery of technology and not every requisite skill exists in all teams. Do not be afraid to expand your DevOps skillset to cover those gaps. When someone blurts out "There has to be a better way!", there probably is a better way. While delivering technology, never stop learning and growing at the same time.