The primary skill sets that DevOps engineers need are either in the system administration or software development space. Those 2 foundational skill sets will help any team build some cool solutions to complex problems.

There are fringe cases where the skill set matures outside of those two primary skill sets. Whichever skill set is lacking when making the transition from traditional delivery patterns over to a more DevOps-focused delivery pattern will need to be picked up to ensure that the team has a complete understanding of the technology stack.

A system administrator will not need to become a full software developer, and a software developer will not need to become a veteran system administrator. Bringing the best of these two practices together is what makes for a successful DevOps engineer.

Related Articles

Don't let Role Separation Scare you Off!

First, let's dive into role separation. I am a firm believer in specialization in job functions. Someone who is a jack of all trades is also generally not a master at any of them.

Individuals on the DevOps team should not be looking to be a master at every part of their delivery pipeline but they should be in a position where they are picking up adjacent skills to help back up their team members when needed.

A software developer who is familiar with one or more programming languages does not need to be intimately familiar with every intricate detail of a backup solution but should know how to retrieve and restore backups when necessary.

A system administrator does not need to dive deeply into SQL query optimization, but knowing how to write and retrieve data from the database is a useful skill to help support the team.

I firmly believe that everyone should pick up at least one programming language that they can become proficient with. Utilizing code to quickly evaluate, split, transform, or compare lists is a great place to start off since every company has data that needs something done with it. From there, you can choose to grow your skills organically or strategically depending on your affinity for writing code.

Why do System Administrators Need Development Experience?

As system administrators make the transition from the GUI to doing DevOps, they will be faced with many challenges where a coding background can really help out.

DevOps is all about automating the flow of delivery through resilient pipelines to increase quality. To do this, most of your work is going to be through scripts or tools like Chef, Terraform, Puppet, CloudFormation, etc. Composing individual scripts for individual tasks is a good place to start, but will quickly become overwhelming if you are not embracing a more generated approach.

Now, all teams are going to be set up a bit differently, but a common thread across all of them will be the scale of technology becoming overwhelming at some point. One day you may be looking at fifteen servers/services and the next day your product explodes in popularity and you are dealing with thousands of servers/services.

Take a step back and ask yourself how you can use business logic to generate your infrastructure, monitoring, configurations, backups solutions, automated testing, etc. This approach will make something that feels unmanageable and makes it manageable again.

▶ Real World Example

In my last system administration role, starting at a new company, I found a bit of a mess. Servers were manually configured, there was almost no deployment automation or validations fo successful deployments, and there was broad access around the organization directly to production servers and databases.

One of the first steps that I took was to utilize Puppet to build out server roles to more clearly define the intent of a server. Next I brought in Ansible to work as an orchestration engine across the ecosystem.

This all seemed like it was working under the existing use cases, but then we landed a new customer and it became clear that the amount of work it would take to build that customer was much greater than it was without automation.

This is where I took my software development experience and started to build out an in-house CMDB we called inventory-management. I know, it's a super creative name. This allowed us to remove almost all of the mundane configuration parameters and replace them sane defaults. From there, we were able to generate all of our configurations on the fly and utilize overrides for special use cases.

We went from an overwhelming amount of work to deploy a customer to a generator that could stand up new customers in an advanced ecosystem in a matter of hours.

Why do Operations Teams Need Experience with Code?

Let's say you are working in a hybrid multi-tenant environment that is changing at a rapid pace. Let's also say that you are saddled with several different operating systems or services in this environment. Now let's say you are a small team of only a few people with operations tasks piling up by the hour and you are unable to complete them due to the sheer volume of incoming work.

Sounds pretty standard right? I believe there are a series of DevOps tools that can help. Beyond that, I believe that scripting languages along with some coding knowledge can greatly increase your efficiency.

In a hybrid environment, you are going to need to really lean on your technical skills to ensure that the right machines or services in the right place are being maintained. On top of that, you are going to need a pretty accurate inventory of information to work from in order to stay efficient. Deploying a scripting language to utilize cloud console tools may be a quick way to pull together something like a bash alias file for quick environment access.

When faced with the challenge of scripting against any specific operating system, one could keep a series of scripts handy on their computer to run repetitive tasks. Alternatively, they could utilize a tool like Ansible and ensure not only is their automation is targetable but also ensure that it is composed in a reusable way as well. This could all be contributed to by a DevOps team in a source code management system like GitHub ensuring it is accessible by everyone on the team.

The key to operations teams is to keep work fast and efficient. Spending some time orchestrating complex events into the software development life cycle is a great way to ensure that operations becomes everyone's responsibility to contribute to.

▶ Real World Example

Operations is NOT easy. You have an entire business with different perspectives, motivations, needs, and technology stacks all asking operators to do the impossible.

Operators, your job is NOT easy, but I believe that software development practices can buy you a bit of relief. Working towards scripting out your most common activities and getting them committed to a repository is a great way to start moving towards automated remediation. Additionally, any of this work that becomes automated could be consumed by the teams you are working with as a specification for what they should be either remediating in their applications, or should be directly integrating into their application flows to reduce the burden on operations.

Why do Quality Assurance Teams Need Exposure to Software Development?

Coding skills are becoming more and more relevant to quality assurance teams. I believe that most quality engineering tools focus too much on being able to point and click your way to success.

By bringing automated testing into your ecosystem, and integrating it directly into your source code management tools, a qa engineer will be able to promote ensuring quality is the responsibility of everyone on the team. People will use what is accessible to them as long as it has a very low barrier to entry.

Coding knowledge is also very helpful in this space. We have all, at one point or another, filed a bug with a development team but since our programming skills were not up to snuff, we were unable to provide any valuable or additional context to the bug. By being able to utilize development tools to dive into the code and return bug tickets with actionable insight, the DevOps team will be able to move much more quickly to resolution.

Another area that I have seen quality teams need some assistance with is around tracking code versions after deploying a new version of their application. By tying your test tracking systems together with a code repository tag and running preflight validation checks on the deployed code versions to ensure they are in sync, you can ensure you are not wasting cycles trying to get the next critical release out the door.

Why do Software Development Teams Need a Familiarity with Development?

Now, this is a bit of an unfair section because I believe that the software development side of DevOps does need a coding background. How are you going to do software development without that?

In all seriousness, I believe the question "Do DevOps engineers need a coding background?" can be extended into the Ops and Infrastructure space pretty easily. I believe that developers looking to wear the moniker of "DevOps engineer" should be looking to extend coding skills into spaces they are less familiar with.

Software developers should be familiar with the basic fundamentals of a data center or cloud depending on where your solution(s) is/are hosted. If you are in a data center, become familiar with fault domains, SANs, LUNs, monitoring, or anything that may impact the stability or performance of your application. In the cloud, become familiar with the cloud's elastic nature of volumes, instances, and services.

Along with the familiarity with computing platforms, it will be advantageous to also familiarize yourself with DevOps tools that enhance solution delivery and system configuration.

Solution delivery and delivery pipelines are essential to a good DevOps background. In my experience, most developers are really good at utilizing their ecosystems to compile a binary or build out a package.

Aside from SFTPing that package out to a server and bouncing a service the idea of automated blue/green solution delivery flow with configuration management, rollbacks, database updates, monitoring changes, etc. is not the norm.

You SFTPers out there know who you are, don't try to deny it.

Developers should be looking for ways to extend their idealized software development process into the infrastructure, operations, and quality assurance / automated testing spaces. One of the greatest challenges I see from Operations teams or Infrastructure teams is their ability to produce a consistent and reliable build and deploy pipeline that provides good actionable feedback. Those features are consistently available in any sort of software development life cycle.

Why do Site Reliability Engineers Need a Coding Background?

As a Site Reliability Engineer (SRE), having a coding background is essential to help automate and streamline the software development process. By writing scripts with coding skills, tasks such as building, testing, and deploying software can be improved with efficiency and minimized potential for human error. This is an increasingly important role in the DevOps industry and I am proud to be a part of it. With my coding background, I feel confident that I can improve processes and make sure the team is successful. It's exciting to contribute to the success of DevOps teams and I'm looking forward to what the future holds!

SREs are responsible for using tools such as Terraform, Ansible, and Puppet for provisioning and managing DevOps infrastructure, which are based on code. Writing and maintaining these scripts requires coding skills to ensure the infrastructure is easy to manage and scale. This is why having a good knowledge of coding allows SREs to be more efficient in their roles and bring added value to the team. Moreover, having a coding background also provides SREs with a better understanding of how the whole system works, from the underlying code behind it to the final result.

With a coding background and the ability to create custom monitoring scripts and tools, Site Reliability Engineers (SREs) are increasingly in high demand. The SRE role is an integral part of the DevOps team, as they need to be able to monitor the performance and health of systems and applications, and to be able to create alerts and notifications when issues arise. Coding skills are essential for SREs as it allows them to create custom tools to more effectively monitor and alert on system issues. For those looking for a challenging career in the DevOps space, being an SRE could be the perfect fit!

Having a coding background is essential for a Site Reliability Engineer (SRE) to be able to troubleshoot and debug issues with systems and applications. Writing code to fix these issues requires a certain level of understanding of how the systems and applications work, and having coding skills can help bridge that gap. Being a DevOps professional means that you need to have an extensive knowledge in coding, as well as an understanding of how it ties in with the larger scope of operations within a company. As an SRE, having a strong coding background will enable you to be able to create the best possible solutions for any issue that arises - making your role as an SRE even more valuable!

Why is a Coding Background Good For Everyone!

The primary driver behind configuration management is trying to hit the gold standard of immutable infrastructure. While application code is being perpetually updated and changed, servers should be treated like cattle instead of pets. We should be able to easily destroy and fully rebuild a server and deploy the newest version of the application on top of it. This helps keep things clean and up to date.

Taking time to learn software development, or any technical skills on a technology team helps drive better communication and collaboration skills. As the team starts to move into continuous integration and continuous delivery model as part of their agile methodology adoption, DevOps teams will need to find new ways to effectively share information. By putting development front and center, and I don't mean just application code here, there is a set of basic knowledge baselines that everyone can agree to communicate under.

Organizations can also find some common ground to reduce extraneous costs on their products as well. Focusing on a smaller set of software development languages, and configuration management tools, and reducing other such technological diversity; you can build an economy of scale around your skilled workforce that has focused on delivering value to the market more quickly. This is especially true when adopting DevOps by merging development and operations teams together. This first move will generally expose a lot of technological waste.

Frequently Asked Questions

Below are some frequently asked questions about how relevant a coding background is in connection to DevOps:

Does DevOps Require Coding?

The short answer is, yes! I would not be very intimidated by this because not everyone on a devops team needs to be a software development savant. You don't need to know deep application architectures (generally), but you do need to know how to work with and support your team on a technology by technology level. A great way to learn these technologies is to do some coding and build automation which is utilized by the team.

What Do Devops Engineers Use Programming, Coding, and Scripting For?

DevOps engineers use programming, coding, and scripting to automate and streamline software development processes, such as building, testing, and deploying software. They often use scripting languages, such as Python or Bash, to write scripts that can perform tasks such as creating and managing virtual machines, provisioning infrastructure, and automating testing and deployment. This allows them to automate repetitive tasks, increase efficiency, and reduce the potential for human error. Additionally, they may use programming languages like GoLang or Java to develop custom tools to support their workflows.

Do System Administrators Need a Coding Background to Work With the DevOps Methodology?

While a coding background is not strictly necessary for a system administrator to work with the DevOps methodology, it can be extremely helpful. Many of the tools and processes used in DevOps rely on the ability to write and understand code, as well as automating repetitive tasks and infrastructure provisioning via scripting. Having a strong understanding of one or more programming languages allows a system administrator to more effectively use these tools and to better understand the applications they are responsible for deploying and maintaining. Additionally, coding skills can also help system administrators to automate tasks and improve efficiency in their work.

It's important to note that, while coding skills can be a valuable asset for a system administrator working in a DevOps environment, it's not the only skill that is required. A good understanding of the underlying systems and networks, as well as experience with configuration management, monitoring, and incident management is also crucial.

Can Someone Work in DevOps Without Some Kind of Background in Programming, Coding, and Scripting?

While having a background in programming, coding, and scripting can be extremely helpful for someone working in a DevOps role, it is not strictly necessary. Many of the tools and processes used in DevOps are designed to be user-friendly and do not require extensive coding knowledge. A person with a background in system administration, IT operations, or a related field, with a good understanding of the underlying systems and networks, and experience with configuration management, monitoring, and incident management can be effective in a DevOps role. They can use the tools and processes to improve the collaboration, communication, and automation between development and operations teams. However, it's worth noting that as the field of DevOps continues to evolve, the use of automation and coding will become more prevalent. Therefore, it may be beneficial for someone working in DevOps to develop their coding skills over time to stay current and competitive in the field.

Which Role in DevOps is Programming, Coding, and Scripting Most Relevant For?

Programming, coding, and scripting are most relevant for the role of a DevOps Engineer or a Site Reliability Engineer (SRE) within a DevOps team. These roles typically involve automating and streamlining software development processes, such as building, testing, and deploying software. They often use scripting languages, such as Python or Bash, to write scripts that can perform tasks such as creating and managing virtual machines, provisioning infrastructure, and automating testing and deployment. This allows them to automate repetitive tasks, increase efficiency, and reduce the potential for human error. Additionally, they may use programming languages like GoLang or Java to develop custom tools to support their workflows. DevOps engineers and SREs are responsible for the design, implementation, and maintenance of the infrastructure and tools used to support software development and deployment. They work closely with both development and operations teams to bridge the gap between them and improve the collaboration, communication, and automation between them. It's worth noting that while other roles within a DevOps team may not involve as much programming, coding and scripting, they still require some understanding of these practices and tools, as they are heavily used within the DevOps culture and methodology.

Conclusion

Do DevOps engineers need a coding background? My perspective is, that it wouldn't hurt. Diving into software development patterns and extending them into the DevOps delivery space allows for greater consistency, along with the ability to scale to meet demand much more quickly without feeling overwhelmed. I don't think that software developers need to become the best systems administrators ever created. I don't think that systems administrators need to become the greatest software developers ever created. I do think that everyone in technology could benefit from a bit of exposure to spaces outside of their primary responsibilities because it lends itself well to increasing quality and flexibility while delivering solutions.