You all know that DevOps is already very popular and highly demanded. You see organizations adopting it worldwide and it seems like a great career choice with lots of job opportunities, high salary and generally a very rewarding work 🔝, but maybe DevOps is not for everyone?
It takes a specific type of person to be interested in DevOps, so the question is: "Is DevOps profession right for you?" 🤔
And in order to answer this question, I will explain
- what are the qualities and characteristics you should have if you want to get into DevOps?
- what kind of thinking and approach is required in DevOps?
- which soft skills as well as technical skills you need to have?
- and finally what are some challenges of being a DevOps engineer?
And if at the end of the video you do find out and decide that DevOps is indeed for you, I will also show what next steps you can take to get into DevOps. ✅
So let's get into it! 🙌
This is the written version of my new youtube video ✍️
First of all, you need to be a generalist rather than a specialist. What does that mean?
Even as a junior DevOps engineer just knowing two or three tools won't help you here, so you should like learning many different things and building a wide skill set.
Because you need many tools you also need to develop a skill to compare, quickly assess and decide on which tools and concepts you will use in your projects. Like
- "do we need GitOps or is it just over engineering for our specific use case and project"
- "This tool is great, but is it ready and mature enough to be used in this project?"
- "Should you use Terraform or Pulumi ?"
It's a strategic decision, right? Use Terraform, which is an industry standard or Pulumi, which is more developer friendly and developer centric.
And for those decisions you need to be able to evaluate and test various tools, you also need to consider many aspects and make efficient comparisons between different technologies to decide which tools and concepts match to your specific use case and will work best for your project.
In order to make those strategic decisions on which tools are best for your specific project and use case, you need to have a good high level overview and end-to-end understanding of DevOps processes. You need to understand which tool fits into which part of those processes and why you're using them:
So the skill of high level thinking is one of the most important ones when you're getting into DevOps.
For example, when you're building a CI/CD release pipeline:
- you need to understand the whole software development life cycle
- you need to understand which roles it affects
- what steps need to be combined in which order
- which systems are affected and
- who is responsible for what.
Just like an architect, who designs the whole house 🏠, considering the size of the lot, size of the house that needs to be built, the surrounding space, inner space and all the aspects around it, making a master plan for building the house. The same way you are architecting the DevOps processes on a high level.
As I already mentioned, when you have a good high level overview, it's easier to identify issues, bottlenecks that slow down the process or possible improvement opportunities in the DevOps processes, like release pipeline, monitoring infrastructure management processes etc.
So when you see the whole DevOps process in one continuous line it's easier to see those.
Identifying issues is the first step in solving them and considering that many DevOps processes are pretty complex, it may be challenging to see those issues and ways to optimize things. So you need to be constantly observing and actively looking for ways to improve things and fix the issues.
For example if you identify that developers always need to manually perform some tasks, which takes two hours or you notice that running tasks takes really long, so the CI pipeline runs are very slow 🐌, you should actively look into it and see how how you can speed up or automate things.
Things can be optimized endlessly in DevOps. You don't just build a release pipeline in two months and that's it. It's a continuous improvement process, just like you don't program an application in two months and be done with it, you continue adding features and fixing bugs and so on. It's the same with DevOps processes.
This means as a DevOps engineer you need to have a solution oriented approach, constantly looking for ways to optimize and solve things.
Now coming up with those solutions and improvement ideas will also require creativity and innovative thinking. Why is this especially important in DevOps? Again because in DevOps the processes are very complex and covers so many parts of the software development life cycle, things are often not so straightforward. 🙇🏼♀️
So for one specific task there may be 10 different ways of doing it, so you need to combine things in a creative way to find solutions.
This means most of the time you need to be creative and think outside the box when deciding how to solve bottlenecks, how to speed up DevOps processes, how to increase the quality of product delivery etc.
This also requires innovative thinking, because often the issues you have are very individual for your project. So you need to have a fresh perspective and approach problems this way. Often you can't just see how other companies solve the problems or how your company solved it in the past, because it's a completely new and unique use case so you need to find a unique solution for it.
When you make a plan and come up with solutions that affect many people, various roles in your organization and many team members, of course those affected people should also be on board with those solutions. You may get resistance from engineers or people may be opposed to making changes to existing processes:
So you need a skill to persuade people that your plans are really good and will indeed help them in their work and have positive impact overall on the organization.
So as a DevOps engineer you will need to know how to communicate your ideas and planned changes, get people on board and advocate for your ideas.
So another super important skill you need in DevOps is communication skills. Now let's see why this one's so crucial. 🤔
In order to identify the issues, bottlenecks, improvements and the respective solutions to those, you often need input from various people and various roles in your organization and good understanding of their work and their pain points. 👥
Once you have identified issues and come up with solutions and persuaded the team to implement those, you need to also work closely with engineers to actually implement that plan. So communication is the skill that ties it all together.
As a DevOps engineer you don't work alone. The whole DevOps concept is based on the collaboration between different roles and team members and often these are the roles that have different interests and tasks and sometimes even conflicting interests:
So you need to enjoy working with people and communicating with them since this is going to be one of the major elements of your work as a DevOps engineer. So being a team player is definitely a must here. 🤝
As part of communication skills you also need to be able to effectively express your ideas and explain your plans and strategies to the team members. 🗣 So this also goes hand in hand with the persuasion skills. Let's see why?
As I already mentioned, your work affects many people, you solve problems and bottlenecks for different roles, which means you need to get people to work with you, but also share your knowledge with them, explain new concepts and processes and so on. DevOps engineers are also often the mediators between different roles.
So you need to understand and communicate efficiently with people, who have different interests, tasks and responsibilities. For example let's say you are setting up a CI/CD pipeline.
CI/CD pipeline affects developer workflow first of all. So developers need to be on board with what you're doing and how you are designing their workflow, because they need to work with it. On the other hand, you need input from them to understand what they need in order to work efficiently. So you can use this input to implement the CI/CD pipeline.
CI/CD pipeline also affects test engineers, system administrators, security professionals. So the same way you need need to understand what these engineers need in order to do their part of the job and naturally all their interests need to be aligned as well. So for example, if security needs to validate any security issues, test engineers may write some automated tests to detect those security issues and this automated tests will then be integrated into the pipeline or if a system administrator needs to enforce any policies for developers before deploying the application changes to let's say a Kubernetes environment, you can help them create those automated policy checks and then integrate them into the pipeline as well. And if the development fails, help developers interpret those policies and comply with them.
So you see that as a DevOps engineer you are kind of in the middle of all those different roles, connecting them and basically encouraging and enforcing this collaboration between different team members. 👀
As a DevOps engineer you don't only create the high level design of the processes like a solutions architect, but you also implement things like
- provisioning the infrastructure
- configuring servers
- writing automation scripts
- infrastructure is code or
- X as code
Now there are differences across organizations on the role of a DevOps engineer and what its tasks and responsibilities are. Originally DevOps was not even meant as a separate role, but rather as an overlaying concept. So traditional roles like developers, system administrators etc were supposed to take on those tasks that are now done by DevOps engineers, but in practice it emerged as a separate role who designs the DevOps processes and also works hands-on to implement those processes.
So in order to implement things you need detail oriented thinking, to consider and pay attention to various details and actually implement the things that you have designed.
So you need to be able to focus both on the big picture and small details or in other words create a zoomed out map with an overview and then zoom in into specific spots on the map. When needed you also need detail orientation when troubleshooting issues especially in complex systems like Kubernetes clusters on cloud environments or in complex infrastructure setups.
Now let's say you design the processes and workflows, you implement things and so on. Since these workflows affect other engineers, they need to know how these processes work.
When you create a CI/CD pipeline, developers need to know how to use it and how to develop, what to do and what not to do. So that their code changes actually get released by that pipeline.
Or let's say you have implemented infrastructure as code concept in your organization. When a new systems administrator or cloud engineer joins the team, they need to know how the process of creating and configuring infrastructure works.
So documenting things and making them transparent for others in your organization is extremely important in DevOps.
The processes should be transparent for everyone. 👀 This will make work and collaboration of engineers much easier, but also make onboarding new engineers way easier as well. This means you need to be an organized person, who document things in an organized and structured way. This could be textual documentation or also graphics and diagrams for let's say visualizing architecture, workflows and different processes in your organization. Making things transparent, sharing knowledge, making sure everyone has access to the information they need.
Now apart from personal characteristics you should also have personal preferences for things that are essential for the DevOps daily work.
First of all, you should love dynamic, diverse work with a wide range of tasks, because as I said you don't just work on one tool but rather your tasks may range from coding to configuring infrastructure to monitoring, scripting and so on.
In DevOps you keep pushing out of your comfort zone, constantly working with new tools you don't know. So you should not be just open to changes, but love the changes and actively drive changes and improvements in your organization.
This also means being on the edge of the technological changes and industry trends, being the front of your organization that keeps an eye and observes industry changes and trends and improvements to implement them and bring them into your organization. 🚀
Another personal preference that's super important is that you enjoy identifying optimization opportunities in the existing processes. And I think this is a very important one. ⚠️
For example you should have fun and enjoy solving bottleneck, spitting up things, automating things and seeing the progress from slow manual tedious work 🐌 to smooth streamlined automated processes. 💯
Now as you're probably already thinking DevOps is quite a challenging job. 🤯 It is definitely exciting and rewarding, but it comes with some challenges, which you may also want to consider when deciding whether DevOps is really for you.
First of all, constantly learning new technologies and concepts could be overwhelming for many people.
The responsibility and the challenge in working with people, who may be opposed to your ideas and suggestions or generally resistant to changes can be very difficult as well. And since you need to communicate with various teams in the organization, it can be frustrating if they don't cooperate:
Another common challenge is that often there are unclear requirements about DevOps in the companies themselves, because some companies don't know exactly what DevOps is and where the responsibilities of DevOps actually lie. 😑
So you may get pushed into some role or in doing tasks, which are not really part of the DevOps area. Now this may change in the future when DevOps processes become more standardized and DevOps role becomes more standardized as well, but currently this is a common issue across organizations.
Something that may also bother some people is that most tasks are not visual, but rather in the background, not directly visible by the end users or even the team members. Sometimes the fact that you don't even notice a DevOps process may in some cases be exactly the purpose of the DevOps task.
Like removing the bottleneck so the processes become more streamlined and smooth and generally when working with people, you need to be a person who is able to cope with that resistance and be empathetic and don't get frustrated so easily.
So overall being a DevOps engineer is a bit challenging, but extremely interesting as well especially for people who love to learn and are always ready to tackle complicated issues.
Now apart from the personal qualities and preferences, there are some hard facts that may be very important and influence your decision on whether you want to become a DevOps engineer.
Something that speaks very strongly for choosing this career is that DevOps is currently one of the most demanded professions in the IT field 🥇 and is probably going to become even more demanded in the next years as DevOps adoption keeps growing. 📈
So if you're someone who takes the market demand into account, then this will be an important factor in the decision. 👍
If after reading this you think that DevOps is indeed right for you, then check out my video from Zero to DevOps engineer, where you see how you can transition to DevOps with your specific background. 🔝 Whether you are a systems engineer, software developer, test engineer or a complete IT newbie.
And if you actually decide to get into DevOps and become a DevOps engineer and want to commit to learning it, then you should definitely check out our six month DevOps bootcamp, where you learn all the tools and concepts you need to become a DevOps engineer in a structured step-by-step way. 👏