A step by step guide of how to become a DevOps engineer in 2023
As a DevOps professional, sometimes I forget how it is getting into DevOps from the perspective of a beginner. So I wanted to create this article outlining a path I would take, if I was starting from zero again. 0️⃣
And having the knowledge that I have now, what would be the most efficient path to get there. So basically what are the steps to becoming a DevOps engineer, what you need to learn and in which order. ✅
And I wanted to make it more individual for the people with the most common backgrounds of transitioning into DevOps and based on your replies on LinkedIn, I picked 5 of the most common backgrounds:
system administrators
software developers
test automation engineers
network engineers and
people with zero or very very little IT knowledge.
Here an overview of the blog post:
What is DevOps?
Step by step DevOps Roadmap - What is the DevOps skillset?
Your specific starting point when learning DevOps
Summary
What does DevOps actually mean? And what is a DevOps Engineer? 🤔
DevOps is a software development approach involving Continuous Development, Continuous Testing, Continuous Integration, Deployment and Monitoring.
The above process spans across the traditionally siloed teams of Development and Operations and DevOps tries to remove the barriers between them.
So, a DevOps Engineer works basically with the DEVelopment and OPerations team. It's the link between those 2 main parts. More infos here: https://youtu.be/0yWAtQ6wYNM
Concepts vs Tools 👀
DevOps includes concepts like Build Automation, CI/CD, Infrastructure as Code, etc. And there are numerous tools that enable these concepts to be implemented. And because of these vast number of tools, it can get confusing and overwhelming.
The most important thing is to understand the concepts and learn 1 specific tool for each category. E.g. when you already know what CI/CD is exactly and know how to use Jenkins, it will be easy to learn an alternative tool as well.
Let's get straight into the roadmap of what skills you need to learn.
DevOps Roadmap to get started as a DevOps Engineer
⭐️ 1) Concepts of Software Development
As a DevOps engineer you will not be programming the application, but as you are working closely with the development team to improve and automate tasks for them, you need to understand the concepts of:
how developers work
which Git workflow they are using
how applications are configured
automated testing
⭐️ 2) Operating Systems & Linux Basics
As a DevOps engineer you are responsible for preparing the infrastructure (servers) on which the application is deployed.
And since most of the servers are Linux servers, you need to know Linux OS and feel comfortable using the Command Line Interface. So you need to know:
Basic Shell Commands
Linux File System
Basics of how to administer a server
SSH Key Management
Installing different tools on servers
⭐️ 3) Networking & Security
You also need to know the basics of Networking & Security in order to configure the infrastructure, e.g.:
configure Firewalls to secure the application
understand how IP addresses, ports and DNS works
Load Balancers
Proxy Server
HTTP/HTTPS
However, to draw a line here between DevOps and IT Operations: You are not the SysAdmin. So you don't need advanced knowledge here. It's enough to understand and know the basics, because there are own professions like SysAdmins, Networking or Security Engineers
⭐️ 4) Containerization - Docker
As containers are becoming the new standard, you will probably run your application as a container. This means you need to generally understand:
concepts of virtualization
concepts of containers
Which tool to learn?
DOCKER - the most popular container technology today
⭐️ 5) Continuous Integration and Deployment (CI/CD)
In DevOps, all the code changes, like new features and bug fixes of developers, should be integrated in the existing application and deployed to the end user continuously and in an automated way. Hence the term: Continuous Integration and Continuous Deployment.
And setting up a complete CI/CD pipeline is the main task and responsibility of a DevOps engineer.
So when the feature or bugfix is done, a pipeline running on a CI server (e.g. Jenkins) should be triggered automatically, which:
runs the tests
packages the application
builds the Docker Image
pushes the Docker Image to an artifact repository and finally
deploys the new version to a server (which could be a DEVELOPMENT, TESTING or PRODUCTION server)
So skills you need to learn here:
setting up the CI/CD server
Build Tools & Package Manager Tools to execute the tests and package the application
configuring artifact repositories (like Nexus or DockerHub)
Of course, there can be more steps integrated, but this flow represents the core of the CI/CD pipeline and is the heart of the DevOps tasks and responsibilities.
Which tool to learn?
Jenkins is one of the most popular CI/CD tool. Others: Gitlab, Bamboo, TeamCity, CircleCI, TravisCI
⭐️ 6) Cloud provider
Nowadays many companies are using virtual infrastructure on the cloud, instead of managing
their own infrastructure. These are Infrastructure as a Service (IaaS) platforms, which offer a range of services, like backup, security, load balancing etc.
These services are platform-specific. So you need to learn the services of that specific platform. E.g. for AWS you should know the fundamentals of:
IAM service - managing users and permission
VPC service - your private network
EC2 service - virtual server
AWS has much more services, but you only need to learn the services you/your company actually needs. E.g. when the K8s cluster runs on AWS you need to learn the EKS service as well.
AWS is the most powerful and most widely used one, but also one of the most difficult one.
Which tool to learn?
AWS is the most popular cloud and IaaS platform.
Other popular ones: Azure, Google Cloud
⭐️ 7) Container Orchestration - Kubernetes
As I mentioned before, containers are widely used and in big projects, you may have hundreds or thousands of containers running on multiple servers. This means these containers need to be managed somehow.
For this purpose there are container orchestration tools and the most popular one is Kubernetes. So you need to learn:
how Kubernetes works
administer and manage the Kubernetes cluster
as well as deploy applications in it
Which tool to learn?
KUBERNETES - most popular
⭐️ 8) Monitoring and Logging 🔍
Once software is in production, it is important to monitor it to track the performance, discover
problems in your infrastructure as well as application. So one of your responsibilities as a DevOps engineer is to
setup software monitoring
setup infrastructure monitoring, e.g. for your Kubernetes cluster and underlying servers.
Which tool to learn?
Prometheus, Nagios, ELK stack...
⭐️ 9) Infrastructure as Code
Manually creating and maintaining infrastructure is time consuming and error prone. Especially when you need to replicate the infrastructure, e.g. for a Development, Testing and Production environment.
In DevOps again, we want to automate as much as possible and that's when Infrastructure as Code comes into the picture.
With IaC we use code to create and configure infrastructure and there are 2 types of IaC tools you need to know:
infrastructure provisioning
configuration management
With these tools it's easy to replicate and recover the infrastructure. So you should know 1 tool in each category to make your own work more efficient as well as to improve the collaboration with your co-workers.
Which tool to learn?
Infrastructure provisioning: Terraform is the most popular one
Configuration Management: Ansible, Puppet, Chef
⭐️ 10) Scripting Language
Since you are closely working with developers and system administrators to also automate tasks for development and operations, you will need to write scripts and small applications to automate tasks.
In order to be able to do that you need to know a scripting or programming language.
This could be an OS-specific scripting language like bash or Powershell.
But what's more demanded is an OS-independent language like Python, Ruby or Go. These languages are more powerful and flexible. If you know one of these, it will make you much more valuable in the job market.
Which tool to learn?
Python: currently the most demanded one, which is easy to learn, easy to read and has many libraries available.
Others: Ruby, Go, JavaScript
⭐️ 11) Version Control - Git
You write all these automation logic mentioned above as code. Just like the application code of developers, you manage this code and configuration files also with a version control tool, like Git.
Which tool to learn?
GIT - most popular and widely used
What is YOUR starting point?
Having those DevOps skills is the final goal and you're starting from zero, but many of you are transitioning to DevOps or starting your DevOps journey having various different backgrounds.
So the zero or that starting point is different for all of you and as I mentioned at the beginning you may be systems administrator or software engineer or QA engineer etc or may not have an IT background at all and want to transition into DevOps:
So now I want to show you how you can transition to DevOps and basically learn all these tools that I just mentioned starting from your specific background. ✅
Starting as a Systems Administrator 🧑🏽💻
If you are a systems administrator you know how to administer servers and other systems. So you already have some skills in:
setting up infrastructure
configuring and preparing it for deployment
so working with operating systems, installing and running software
security, networking configuration etc is already familiar for you.
Some of the other tasks you do as systems administrator are things like monitoring systems, health, backup and disaster recovery, installing and patching servers and so on.
In smaller projects you may have to also do database administration, network administration or security administration.
All of these are very useful skills, if you want to become a DevOps engineer. 👍
So you already have a lot of skills you can use in the deployment and operations side of DevOps:
This includes Day 0 activities such as initial setup of the infrastructure, but also Day 1 tasks like maintaining and operating this infrastructure.
Many systems administrators also know scripting, so that will be helpful in the automation part of DevOps. So as a systems administrator you already have a very good foundation to get into DevOps, however the big part missing here to start in DevOps is learning the software development basics:
understanding the git workflows
how developers work and so on
Now very important to note, even though some DevOps engineers do know how to program, it's not an essential skill in DevOps, because as a DevOps engineer your main task is not developing and programming the application it's creating automated processes for delivering the developed software to the end users efficiently with as few bugs and issues as possible:
But to be able to deliver the application changes, of course you need to understand how that application was built, developed and how it works.
Starting as a Software Developer 👩💻
If you are a software developer, again you have a pretty good background, because you already know an important part of DevOps, which is the software development processes and how these work.
But most probably you are missing skills in server management. So you need to start by learning about:
virtual machines
creating and configuring servers
configuring infrastructure security, networking etc
And since most modern applications run on cloud, you need to also learn how to do all these on cloud infrastructure.
So that would be your starting point when learning DevOps as a software developer.
And once you have that foundation you can build on that by learning about how containers work on top of the virtual machines and how to run applications in containers and how to run containers on a platform like Kubernetes etc.
And of course your programming skills will be great help in writing automated scripts for various parts of the application development and deployment processes. 👍
Starting as a Test Automation Engineer👨🏼💻
Another common background people have when transitioning into DevOps is a test automation engineer. Now here you may have a bit more catching up to do and more skills to learn compared to developers or systems administrators, but you can definitely reuse many of your skills in DevOps.
As a test engineer you most probably know how the software developers are working, like the agile processes, Jira workflows and so on. And as part of your test automation knowledge you understand the different testing scopes like
testing on code level
testing the whole application on a more abstract level
testing how the application integrates with other services etc.
You also understand how to test different aspects of an application and that knowledge is really helpful for setting up an automated CI/CD pipeline, because in order to automate the pipeline and streamline delivering your application changes all the way to the production environment, you need extensive automated testing:
Because as soon as you need a human element you will break the automated pipeline and add a bottleneck:
And since you know how to write automated tests in various programming languages, your skills in various testing frameworks is definitely helpful here for scripting and coding some automation parts of DevOps processes. Or let's say it won't be completely new to you. 👍
Starting as a Network Engineer🧑🏻💻
The last honorable mention of a background going into DevOps is network engineering. This is probably the farthest from DevOps compared to the other three that I just mentioned, but you still have some skills that you can bring into DevOps as a network engineer.
As a network engineer you know how to configure devices and networking between devices. So you have valuable knowledge in configuring networking for infrastructure on premise.
Transition to Cloud Network Engineer But as most companies are moving their infrastructure to cloud, many network engineers transition to cloud network engineering:
So they do all of that on cloud platforms. And instead of configuring routes and switches and networks on on-premise infrastructure, they configure virtual routes and virtual switches and virtual networks on cloud infrastructure.
With networking and virtual networking knowledge you have an advantage to understand networking in virtual machines and containers, which is a big part of how modern applications are running. So it will be easier for you to understand Docker and Kubernetes networking for example and these are usually pretty difficult parts to manage and troubleshoot or secure, when you're configuring and maintaining the deployment environments with Kubernetes and containers on them.
So you can definitely use your knowledge and expertise in this area. Some network engineers even know scripting in bash or python for example, which is another helpful skill when it comes to automation part of DevOps.
DevOps Bootcamp considering these different backgrounds 💡
Now all of these backgrounds we actually considered when creating our DevOps bootcamp curriculum.
So we added the Linux Basics module, where you learn everything about Operating Systems and Linux as well as Networking, Bash scripting and so on. Everything from scratch:
So if you are a software developer or a test automation engineer, this will give you the prerequisite knowledge and foundation for learning things like provisioning deployment servers, configuring servers and preparing for deployment etc as well as how to administer some DevOps tools like Jenkins and Kubernetes cluster and so on.
Obviously as a system administrator you would skip that part, but instead you would need to learn Git and how to work with Git workflows, to use it for writing infrastructure as code for example. You also need to learn about build and packaging tools to package the applications written in various languages.
So as you see there are some prerequisites you need to have in DevOps and various backgrounds bring various of those prerequisites with them and we included those prerequisites as well for those missing them, but after those prerequisites are fulfilled the path pretty much looks the same for everybody, because tools like Kubernetes, Terraform, EKS, even Docker are pretty new to many professionals and there is no one profession that was specifically dedicated to those tools previously.
So everyone needs to learn them no matter what their IT background is:
Starting with no or little IT background 🙉
Finally, we also get many questions about starting our DevOps Bootcamp with very little to no IT background. Which means there are probably many of you reading this article, who are thinking about getting into DevOps without much IT pre-knowledge and want to know what the path is to DevOps.
Now this is a very tricky one, because DevOps is NOT really the entry-level profession in it. It's not the first thing you learn when you want to get into the IT field. Now why is that? 🤷🏻♂️
Because DevOps is about
automating processes and software development and deployment that people have done manually for a very long time.
This means before you automate processes and tasks that are done manually, you first need to understand what those processes and tasks are in the first place. If you don't understand those, you won't know what you're automating or why you even need DevOps.
1 - Understand the complete software development lifecycle
So if you're completely new to IT and already know you want to eventually become a DevOps engineer, then you should start by understanding the complete software development life cycle first. And the good news is, it's easier than it sounds. You don't need to go and learn software development for months for that and you definitely don't need to become an expert in managing infrastructure and configuring servers.
If you learn the right things, you can actually do it in a relatively short time: Go find some example projects, where you create a super simple application and learn how to deploy to a virtual server, so learning the steps of developing, packaging, maybe even automatically testing and then deploying an example application on a Linux server on a cloud platform.
This will actually be a very good foundational knowledge for building on it to learn DevOps. In this process
you will learn the basics of creating an application
you will learn how to create a virtual machine with a Linux server on some easy to use cloud platform and host your application there
And then repeat the whole process once more, simulating making an update to your application and this will teach you basic skills for each part of the software development process, but most importantly it will make you understand the complete workflow of what goes into that. 👀
You don't need any fancy tools for that, no Jenkins, no fancy programming framework, not even Git. Again these are to understand the basic concepts and then you can start learning those DevOps tools like Jenkins, Docker, Kubernetes and so on. Because this phase is not about learning the tools, it's about understanding the concepts and the complete workflow.
2 - How software development teams collaborate
After that go ahead and watch some tutorials about agile and scrum methods and how software development teams collaborate and work in software development projects.
3 - DevOps Pre-Requisites and 4 - DevOps Skills
And these skills will actually be enough to start our DevOps Bootcamp, because Linux, Git and all these basic tools you actually learn in our bootcamp from scratch. 🚀 But again you need to understand those workflows first in order to understand, why we're using Git, why we need Jenkins, why we're learning Linux and scripting etc.
And because of a lot of requests for our Bootcamp from IT beginners 🙈, we actually also decided to create a complete bootcamp prerequisites course. So if you're interested in that you can already sign up to get notified when the course is out 🔔: IT Beginners Course
So you can of course learn this as I said all by yourself following those steps and put a learning path together by yourself or you can use our prerequisites course when it's out.
Where are you starting your DevOps journey?
Software Developer
Systems Administrator
Test Automation Engineer
Network Engineer
Summary - DevOps Roadmap
So to summarize there are 4 phases:
1 - Getting the pre-requisites right
First one is getting the prerequisites right. So depending on which background and pre-knowledge you have, you need to first make sure to get any missing prerequisite knowledge.
So as a system administrator or a network engineer, learn the software development workflows. As a developer, learn the basics of infrastructure, virtual servers etc. Of course with zero IT background, you have to get all this prerequisite knowledge from server administration to development first. So you have a more difficult entry, but it is possible if you know what to learn.
2 - Cloud, Docker, Kubernetes
Second step is learning Cloud, Docker and Kubernetes. After learning the prerequisites, you can already get started with important DevOps skills of working with containers and container orchestration tools. So basically learning Docker and Kubernetes to help your teams deploy and efficiently run the application. Kubernetes itself is a very complex tool, so it may take some time to master it and make it production ready.
And since most of the modern applications and Kubernetes clusters are running on cloud, you need to learn cloud infrastructure, how to work with cloud infrastructure, how to configure it, how to scale it and so on.
3 - Automation
The third step is automation. Once you have mastered the above skills and technologies it's time to learn how to optimize and automate the existing processes. And as a DevOps professional automation skills are one of the most important ones.
As the heart of DevOps, learning to build CI/CD pipelines is an essential skill.
And finally you will learn how to automate parts of the complete DevOps processes one by one using the concepts and tools of what's called X as code, including Infrastructure as Code, Configuration as Code, Security as Code, Policy as Code and so on, which basically means just automating everything in the form of code.
4 - Go from there. Keep learning 🧠
Number four is just go from there. DevOps is evolving and new tools are being developed all the time. So as a DevOps professional, you should learn how to evaluate and test many new tools, always with the same goal to optimize and automate existing processes and make them efficient.
Some notable concepts and tools:
GitOps (ArgoCD 👉🏼 🎬 ArgoCD Tutorial)
Service Mesh (Istio 👉🏼 🎬 Service Mesh and Istio explained)
I also have a video where I explain how I personally learn new technologies fast and efficiently, which I will also link right here: How I learn new technologies as a DevOps Engineer (without being overwhelmed)
Now I hope this detailed information is going to be useful for you and I was able to show you what your next steps are for getting into DevOps 😊
-----------
Good luck on your DevOps journey! 🎉 💪
----------
Like, share and follow me 😍 for more content: