DevOps is a relatively new approach to managing IT operations. The simplest way to explain it is through the idea of shared responsibility: DevOps assumes that a company’s software developers and operations experts (or sysadmins) work closely together, sharing the same goals and incentives. This might seem commonsensical, but historically developers and system administrators at most organisations worked in strict silos, had limited communication, and did not work towards the same goals. In fact, more often than not, they had opposing motivations.
Disclaimer: DevOps is not a job description, it’s a philosophy. However, to make this article easier to read, the term ‘DevOps engineer’ is used throughout to denote a system operations engineer following the DevOps approach. It’s important to remember that software developers in a company that wants to do DevOps should use the same approach - one-sided communication from only the operations team that falls on deaf developer ears won’t do anyone much good.
The work of a DevOps engineer
As its name suggests, DevOps is a fusion of development and operations. Not literally: teams are still divided into developers and systems engineers, but their culture is vastly different. A DevOps engineer is an operations expert that understands software development lifecycles and knows how to use a wider set of tools. He or she should have a good understanding of the principles of programming, be an excellent sysadmin, have experience with testing and deployment, as well as a firm grasp of agile project management and the interconnection between IT operations and the business goals of their company.
A DevOps engineer knows and uses cutting-edge practices. A lot of focus in the industry is shifting towards open source technologies and minimising repetitive work by using existing solutions (like frameworks and libraries). Rapid development, fast iterations, and dynamic growth are a fact of life, and DevOps engineers need the ability to adapt to the changing needs of modern businesses. Robust testing and deployment flows are a part of this, and so is an ever-evolving array of tools and providers.
To be an efficient DevOps engineer, one needs to have some familiarity with GitHub or Bitbucket for source control, as well as Bamboo or Jenkins for continuous integration. Docker or LXD can be used for containerisation, while Kubernetes, Swarm and Apache Mesos are server orchestration tools. Popular infrastructure automation tools include Puppet, Chef and Ansible. There’s Terraform for configuration and various monitoring tools, such as Prometheus. Finally, more and more companies choose to host their services in the cloud, using providers like AWS, Google Cloud or Microsoft Azure.
On top of all that, a DevOps engineer fulfills a support role. They need to have high communication skills to work closely with developers, establish common goals, and solve problems together. To achieve this, a basic understanding of the programming languages in the company’s tech stack may be necessary. DevOps engineers don’t usually write a lot of code, but they cooperate with developers on integrating the components that make up the app (or apps) they support.
Finally, any self-respecting DevOps engineer will know the app under their care well enough to manage sudden middle-of-the-night fires on their own, without waking up half of the development team. This doesn’t mean that deep knowledge or perfect familiarity with the code are required. To make at least a temporary fix, it’s usually enough to understand how the app should function and why a problem is a problem. Having the right mindset can be crucial here: a DevOps engineer can’t go about their life pushing work off on developers because “it’s their problem”. The entire point of doing DevOps is to share responsibility for the project and work closely together.Verbal communication, collaboration and empathy are important skills in DevOps engineer everyday work.
Becoming a DevOps engineer
If you’re looking at job listings for Senior DevOps Engineers, you might be getting a bit ahead of yourself. This is the sort of work in which experience is invaluable and irreplaceable, no matter how much theoretical knowledge you have. But don’t let that be a discouragement! Especially if you’re starting from the position of a software developer or a sysadmin. Experience in either of these fields will put you ahead of the competition.
The road to becoming a DevOps engineer begins with a solid foundation in using Linux, AWS, and Python. Considering current trends, these technologies are crucial to learn. The next step is familiarising yourself with the wide array of tools used for app configuration, deployment, and maintenance. There are no shortcuts here: a DevOps engineer is expected to provide assistance at all stages of product delivery.
The table above shows a selection of tools that DevOps engineers often use. You won’t need to have expert knowledge of all of them, but a broad understanding of their purpose and close familiarity with some of them can go a long way towards landing you that dream job. If you’re looking at a particular company, find out what they use and go with that. If not, you’ll need to make your own choices based on preference and learning curve. Be curious! Let yourself explore and have fun. Aside from keeping you motivated and excited, making mistakes while learning can help you avoid them later, when the stakes are much higher.
Other skills you’ll need include automation, designing technology stacks and scripting with Shell, Perl or Python. You need to get some experience in configuration and automation management, as well as the Linux/Unix environment. Learn what the operational best practices are - this can be achieved by working with or as part of a deployment team. Experience with AWS in a production environment is also going to boost your chances at landing a DevOps job.
As already mentioned, a DevOps engineer needs to be highly communicative and able to cooperate with their company’s development team. Work on your verbal communication, collaboration skills and empathy. Learn to understand your colleagues and their lingo. Together with your team, you’ll build a culture that will have a direct effect on your productivity and happiness at work.
A strong feeling of project ownership will help, and so will awareness of others’ work. One example would be delivering work in small increments to make sure others can move forward with their tasks which may be dependent on your progress. Flexibility and the ability to multitask are crucial, as well. You need to be prepared for being bombarded with multiple requests at a time, from different people. Shielding yourself with a list of priorities might not be viable, as most of these tasks will be urgent.
Finally, it’s important for a DevOps team to understand their company’s business needs and put the customer first. Choices between a task for the development team and an urgent request from a customer success representative might have to be made. To do so in a way that will benefit the whole company, the DevOps engineer must be able to see the big picture and communicate effectively with other teams. You simply need to be able to decide what course of action makes sense in any given circumstances.
A DevOps engineer needs to deal with frequent iterations, a robust testing process, and the rapid flow of continuous delivery. On top of that, they need excellent communication skills, the ability to collaborate with a variety of other specialists, and enough understanding of their company’s business to make viable choices when prioritising tasks. It’s an exciting, ever-changing, high-stakes job - and, as explained above, there’s a clear path you can take today to become a successful DevOps engineer.