What Is A DevOps Engineer?
DevOps Engineer Job Title Explained
During the DevOps gold rush of 2015, the role of DevOps Engineer was not as defined as it is today. During that time, employers were just throwing job descriptions at the wall and seeing what stuck, hiring all order of people who were qualified, and those who were not. Also during this time, there was also this unrealistic expectation that DevOps Engineers could take a company from legacy to DevOps in like, weeks. Unrealistic expectations, disastrous job descriptions and the like lead to the industry standardizing the role of DevOps Engineer.
What Is A DevOps Engineer?
A DevOps engineer is an IT professional who uses well defined processes, tool chains, and various project management methodologies (Like Agile) to enhance the software development life cycle. This lifecycle included an all-encompassing pipeline from development to production that essentially consolidates two roles within a technical organization; the Developer and the Systems Administrator.
Development teams and IT operations teams often have skills and goals that have a wide juxtaposition. This skill and goal friction is often seen when product teams need to rush something into production. Developers often lack the skills that make good systems administrators, and good systems administrators are often not very good developers, and as such they fail to understand each others side of the house.
DevOps engineers bring the most important aspects of both roles to the table, often acting as a bridge between developers and operations. DevOps as a whole is a culture, with its own philosophy, practices, and tools. Anyone in either Development or Operations roles can transition into DevOps, but the dispora between both of those roles often makes it hard for someone who is entrenched in one area or the other to truly adopt the DevOps mindset
Further reading on the role can be found here
What Skills Should A DevOps Engineer Have?
I wrote an article on How To Learn DevOps That covers some of the skills that one should learn when seeking to transition into the role, but I will cover those here again and save you a click.
DevOps Engineers Must Know Linux
Linux is the absolute foundation upon which all DevOps operations are built upon. I have read articles where authors say that you don’t need to be an expert in Linux - but having managed a DevOps PaaS startup, and handled DevOps implementations for countless organizations over the last 5+ years, that is a bold faced lie. Linux makes up for 2/3rds of the use cases where DevOps is implemented for a particular stack. DevOps in the Microsoft world is almost an antipattern. Microsoft goes about it all wrong, which I could expound on in another post someday, but the takeaway here is that Microsoft’s family of operating systems simply don’t offer the scale and flexibility that Linux does. As such, most of the roles you see advertised will be for stacks that run on Linux as the operating system of choice.
DevOps Engineers Need To Know Scripting
One of the central tenants of DevOps is the ability to automate repetitive tasks. You or your candidate should have a functional knowledge of all, or some combination of:
- Shell Scripting - This is a scripting language used in the various Linux shells. They all share some syntactical pieces depending on the shall that you are coding in. The most common I have seen out there is Bash.
- Python Scripting - Python is an important language to know because it interacts with API’s better than shell scripting, and as such it allows more coverage when you need to script based on event driven dynamics.
- Groovy - If you find yourself or your candidate working a lot in Jenkins, this language is an absolute must.
- PowerShell - Before you think I’m a hypocrite, I have had to migrate a lot of on-prem workloads that were running on Windows Server, and PowerShell allowed me to automate many of those tasks. while migrating from Windows to Linux.
While there are countless tools available for handling most aspects of the software lifecycle, there will always be some last mile tasks that you will need to automate where the bigger tools don’t offer coverage. This is why some people call these scripting languages “glue languages” - because they let you glue parts of your tool stack together.
DevOps Engineers Must Be Able To Communicate In Plain Language!
Honestly, this is what separates the workers and the professionals. You have to be able to articulate what you are doing, what you need, and be able to generally coordinate with headcount across your enterprise. DevOps Engineers have to keep good and readable documentation. In a lot of organizations, the DevOps Engineer is also the highest technical role in the department food chain outside of the executive level technology head count, and as such must be able to communicate with project stakeholders who may have zero functional understanding of technology. Some of the best DevOps engineers I have had the pleasure of working alongside were the ones who could communicate the best. The ones with the best “people skills” were the most valuable players in the technical enterprise.
DevOps Engineers Must Know Containerization Technologies
The future of workload management and orchestration is in containerized workloads. Understanding any or all of these container systems and paradigms are essential to any DevOps engineer you might plan to hire, or if you venture to take the DevOps plunge yourself:
- Docker - This is still how a lot of workloads are packaged up for deployment, and as such is still an industry standard.
- Kubernetes - Kubernetes is an orchestration engine that handles the disposition and allocation of your containerized workload across your infrastructure resources.
- LXC/LXD - This is another containerization paradigm not unlike Docker.
There are countless other containerization solutions out there for different types of workloads. Some day I will write a detailed breakdown on each, but for now, understanding the above is absolutely essential for anyone that seeks to be a DevOps Engineer.
DevOps Engineers Must Understand Centralized Logging And Metrics!
A DevOps engineer must have a functional understanding of how various logging, metrics and visualization tools work. Applications and infrastructures in the DevOps world can scale to N size, where computing resources are often short lived. This means that you need to have a central place to collect logging and time series metrics on the performance and availability of your application and the underlying stack. Such technologies are:
- Grafana - This is a visualization tool where you can build dashboards for time series data.
- Prometheus - This is often used with Grafana. This goes out and collects time series data, which is then visualized with Grafana.
- Syslog - This is an OG way of collecting logs from servers and things like networking hardware. It is still used today in many enterprises.
- Splunk - This is a commercial offering that does centralization of log data. It does indexing and alerting. Many companies that are PCI-DSS compliant use Splunk.
These are just a few of the technologies out there for logging and metrics, but having a functional understanding of those things is of high importance for a DevOps Engineer.
The above list and description are a good starting point for understanding what a DevOps Engineer is, and what they do. Every DevOps implementation and organization is different, so this is by no means an ‘one size fits all’ description of what a DevOps Engineer is, but I think this illustrates the core skills that a DevOps Engineer has and how they ply their trade.