I am a firm believer in continuous learning. I'm often asked how to get started in tech by people curious to start in tech, new engineers, and aspiring DevOps engineers. It's our job as practitioners to develop up-and-coming talent by sharing information. We work in Open Source, so we should also share what people should learn to be able to do the same.
When I was getting started, it was challenging to find information, expensive for courses, and the barrier of entry for new tech was extremely high. It mustn't persist in the future, thus why I care so much about sharing as much as possible.
I've highlighted the 5 Top DevOps Jobs skills in a specific order.
Here's a list of just some of the soft skills required in a DevOps role: communication, critical thinking, self-motivation, time management, problem-solving, listening, and organizational are just some of the Soft Skills needed to survive in today's business world. But, of course, it doesn't start or stop with this list but will continue further.
Soft Skills are probably the most difficult to learn as this is often part of your personality. However, what we can do is practice the Soft Skills which we can improve on, such as listening, organization, and time management are just some of the areas in which you can learn or excel.
I encourage people to try and be on time, prepare for meetings ahead of time, and work on their time management which will automatically improve your organization. All of these skills will help you in the long run. However, what has helped me the most over the years is listening more than talking. It helps you learn about the entire situation and the topic and gives you time to frame your thoughts as a response. Finally, being able to say "NO" is probably the hardest thing to learn. Eventually, you have to be able to push back against a topic or challenge the issue. It's not about being confrontational but being realistic and being able to set boundaries.
Unfortunately, I've been around many people unable to say "NO" over the years, and they bury themselves in work or tasks, which is unrealistic.
Engineers should gain in-depth knowledge of at least one big three public clouds. Then, play around with the services, as most services contain a free tier to experiment with how it works. Finally, deploy them a couple of times, read best practices, and take some courses.
I highly encourage learning Amazon AWS as this is the current leader in the Public Cloud arena. Don't worry. If you learn one Public Cloud, the second and third will be much easier as the plumbing works the same. What's important to understand is how the services interact together, the best practices, and how to build on top of the clouds with your use case.
The Public Cloud moves very quickly, so I recommend taking some courses to understand the basics from companies like acloud.guru or Udemy. Next, do a deep dive into a specialty like DevOps, Big Data, or Security. These skills will transfer across Public Clouds.
"Measure - Change - Measure" should be your mantra. Get familiar with being able to monitor and deploy critical dashboards for performance, and remember that a CPU running at 80% doesn't compare in the slightest to a customer not being able to log in to your software. Only measure what matters to the organization and users, then dive deeper.
I hosted a complete logging and monitoring course at DockerCon for a few years exactly on this which is now all Open Source Docker Logging & Monitioring workshop Open Source
the bread and butter of DevOps is CI/CD. However, most organizations want to understand how you perform DevOps or CI/CD.
I recommend creating a pet project and automate end-to-end. That means picking a Git Cloud service, either GitHub or GitLab. Next, develop runners, deploy your Code to your runners, and continually iterate until you can merge Code and automatically deploy it to your server.
It may sound easy, but it takes a lot of effort and combining Cloud and Observability skills to continue improving your pipeline. Start with building your application automatically, then deploying to a target server, and finally improving this process over and over until it is seamless.
I cannot emphasize enough to learn by doing in this area as it will take time to understand what a runner is, how to build your containers, and finally, how to deploy. Each step sounds miniscule, but it takes a lot of effort and learning based on your environment and application.
I tack on IaC last, as this should be an excellent skill to have in your toolbox. It enables you to automate your entire infra from zero to log in to your application. When discussing Infrastructure as Code, Hashicorp, or Terraform, it jumps to most people's minds, with Pulumi running a distant second.
I added IaC last, as DevOps should focus on the core concepts of application integration and deployment before tackling infrastructure. Why, do you ask? Many of the concepts you learn in application deployments also apply to infrastructure. However, infrastructure adds even more complications as you typically deploy infrastructure and applications.
If you can tackle the above DevOps skills, you will be well on your way to a solid foundation in DevOps. However many people want to learn everything today, but it takes time, trial and error, and lots of troubleshooting failed DevOps pipelines to understanxqd the core concepts fully. My advice is to learn continually, push your boundaries, and keep adding more complexity to "your stack" to learn, iterate, and learn some more.
I always tell people the goal of DevOps is to automate yourself out of a job, but until now, this has never happened. We have a long way to go but we keep pushing towards more automation, learning, and trying new things.
I was recently interviewed by the one and only Bret Fisher on his podcast for 1.5 hours dicsussing exactly these skills.
If you liked this article be sure to Follow Me on Twitter to stay updated!