While there are plenty of articles aiming to instruct newbies on “how to become a DevOps engineer”, none of them answer a simple question – should you become one to start with?
For me, it’s been a long and winding journey to becoming what is called a Site Reliability Engineer (SRE). The journey was unplanned, and for each step, I had to figure out what I want my next challenge to be and how to achieve it. While I am happy I made the decision to head down this path, not everyone in this profession is as satisfied.
This article, therefore, seeks to help those considering a DevOps career decide whether they want to take the same journey or not by providing some background information as well as pros and cons.
What is DevOps?
There are so many different definitions of the concept, and in a way – DevOps is still being defined – but I look at DevOps as a software development culture.
Traditionally, software developers and operations people worked separately, and each team had different interests. Developers want to deliver new features as quickly as possible, but every new deployment to production is a potential risk for the operations team. The need to bridge this chasm created the DevOps culture (DevOps = developers + operations), aspiring to bring these two guilds together and promote the mutual goal of maximizing productivity and the business goals of the organization.
Like I said, a lot has been written, and said, about DevOps as a culture, concept and methodology. If you’re still unsure what it means, I recommend reading up on it. Start with these three resources:
What does a DevOps engineer do?
So if DevOps is a culture, what is it a DevOps engineer actually does? Strangely, this culture got a job title named after it, even though some people think it’s ridiculous.
Generally speaking, a DevOps engineer has skills in both software development and operations.
Even though DevOps responsibilities vary for each company, her or his main occupations would normally be:
- Building and enhancing the CI/CD pipeline: Planning and implementing the fastest and safest way to get code from the developer’s laptop to production. I call this ASABFAP – as soon and bug-free as possible. The Goal is to make the deployments seamless for the developers and the customers by automating the deployment process.
- Infrastructure in the cloud: Cloud computing is built on shared pools of configurable computer system resources and higher-level services that can be rapidly and flexibly provisioned. The infrastructure of a large company would normally include VPCs (virtual private cloud), load balancers, security components, many types of servers and more.
- Configuration management: Managing all this infrastructure in the cloud is impossible without configuration management tools such as Puppet and Chef. Using these tools, you can define what software and abilities you want on each type of server, and they will make it happen.
- Monitoring: Aiming to give the customers minimum bugs and maximum reliability in order to be on top of everything that might go wrong as fast as possible. DevOps engineers monitor A LOT. For example, monitoring is crucial when practicing continuous deployment, since each deployment is a danger to production.
Pros and Cons
Since pros and cons are very subjective, I’ll write some important points to consider, and you can decide whether they are positive or negative.
- Understanding the bigger picture: A DevOps engineer must understand more than how code works. She or he must understand operations, networks, infrastructure, etc. Put simply – DevOps engineers need to understand how it all works. How can this piece of code the developer just wrote become usable by every person with a computer? When it doesn’t work, what is the underlying root cause?
- A vast variety of technologies: While a programmer might be familiar with only one programming language and one database (and still be a very good developer), the technological stack of the DevOps engineer is endless. Just throwing some buzzwords out here: GitHub, AWS, Azure, Puppet, Chef, Ansible, Terraform, Jenkins, Vagrant, PagerDuty, Nagios. If you think I’m kidding, check out this list.
- Constant need to learn new technologies and skills : The ever-evolving technological stack and the vast variety of existing technologies and tools make it impossible to know everything, but as a DevOps engineer, you will often have to learn new skills in order to get things done.
- Room for creativity: The whole point of the DevOps culture is to improve the process of software development. You can either implement other people ideas (that are becoming industry standard), or be an evangelist and come up with your own ideas.
- Tasks are often a marathon: Thanks to the nature of the DevOps engineer tasks, and the fact that infrastructure development is not as developed as software development yet, tasks often take a long time and are hard to test.
- Upgrading: Nothing scares the average DevOps engineer more than upgrading. We often need to upgrade our Kubernetes / Ubuntu / Docker / anything version, which is as simple as running a command in the terminal…and then everything breaks. Upgrading is a great example for a task that often takes way longer than you would expect.
- On Call: In many companies, the DevOps Engineers are responsible for production health, and as such, they participate in On Call rotations, when they handle real-time production incidents. While you can learn a lot from doing this, waking up in the middle of the night and facing mysterious bugs isn’t everyone’s cup of tea.
- Career opportunities: DevOps engineers are in high demand and this will not change in the future. They enjoy high salaries and some of the best conditions in the High-Tech industry.
Summing it up
YES! You should become a DevOps engineer!
Toning it down a little, choosing a career path is extremely personal of course, and depends on many circumstances. For me, being a DevOps engineer is working on a wide variety of tasks with a wide variety of technologies and tools. It’s understanding the bigger picture and being able to investigate issues efficiently.
It’s challenging, scary, and often frustrating.
It’s hugely satisfying, however, when I manage to implement improvements that help others develop software more easily, or when I figure out some issue I had absolutely zero chance of solving just a short time ago.
DevOps is for people who love to learn and are willing to tackle complicated issues. It’s for people who are more interested in the process than in the product, but care about the customers.
If you’ve read this far and decided that you are interested in pursuing a DevOps career – here are few helpful links to get you started:
- How To Become a DevOps Engineer In Six Months or Less.
- The Roadmap to Becoming a DevOps Professional — From Server to Serverless.
- 5 ways to make yourself marketable as a DevOps engineer.