A few years ago at my last company, there was a big push to try and get the software engineers to learn DevOps. The driver was down to just how difficult it was to hire decent DevOps engineers.
It had got to the point that projects were getting delayed by several months as there was no capacity to take care of the infrastructure. Projects that were critical to the business had to hire expensive contractors in order to get the work done.
As a lifetime learner, I don't shy away from learning new skills and took on the challenge of learning DevOps. I already knew my way around AWS, having set up several projects manually in the past, I wasn't starting from zero.
Many companies do still set up infrastructure manually but this can become a nightmare when you need to set up the same infrastructure on multiple environments. The solution was to use Infrastructure as Code (IaC) to provision all of the resources in AWS. There are a few ways to do this but we chose to use Terraform for this.
One of the benefits of learning a new skill on the job (in addition to getting paid for it) is you have access to all the code that others have produced before you. As I mentioned in my previous post, as a child I liked to take things apart to see how they worked.
I did exactly the same thing with the Terraform code that we had at the company. I went through each module to see how it was structured, compared it to the resources on AWS and looked up anything I didn't understand in the Terraform documentation.
I also took a few courses on Udemy and Pluralsight to make sure I had covered everything.
Within a couple of weeks, combined with my previous knowledge I knew enough to be able to write my own Terraform modules and provision my own infrastructure in AWS.
Many of the engineers who took the time to learn DevOps became the go-to people in their teams for infrastructure work. Some even switched over to focus more of their time on DevOps as they enjoyed it so much.
However, not everyone was as happy to learn DevOps. The reasons given ranged from:
- That's not my job.
- I have enough to learn already.
- I need an official AWS certification before I can do anything.
I am not going to tell anyone that they have to learn something. All I can do is share my reasonings behind why I chose to learn DevOps and hope it nudges people in the right direction.
Why should you learn DevOps? 👍
I have never been happy being a cog in a machine.
I want to know enough about everything so that I can build and run the machine myself. If you only know a single piece of software engineering then you will always be stuck as a cog, as you are reliant on others to create the whole application.
A frontend developer needs a working backend application to do their job. A database administrator needs an application to use the database. DevOps need an application to use the infrastructure they have built. Most "Full Stack Developers" only focus on frontend and backend and completely miss out infrastructure and DevOps.
If you know a little bit (or a lot) of everything then you can start with an idea and build out the whole project. Sure it will be a lot quicker if you have help but it is possible.
Even if you don't have dreams of building your own SaaS business one day, knowing DevOps has other benefits as well.
- 💰 Higher Salary - many companies will pay more for a developer who also knows DevOps.
- 👍 Better Engineer - understanding what is possible on the infrastructure side will help when comes to designing software as well.
- 💼 Job Security - there is currently huge demand for DevOps engineers which makes it easier to find a job.
Why shouldn't you learn DevOps? 👎
Out of the excuses given for not learning DevOps, there is one that is very valid.
I have enough to learn already.
Unless you want to become a DevOps engineer, I would hold off until you have a good foundation first. I have included monitoring and DevOps in my Backend Developer Roadmap but they are at the bottom for a reason.
If you are still learning and feel that adding even more to your plate would be too much then stop. Eventually, you will reach a point where you know everything else pretty well and have the capacity to take on more, it just takes time.
DevOps is one of these skills that is easier to learn on the job than by yourself. Until you are responsible for an application that you need to deploy to production it is easy to make lots of mistakes.
You will need someone with experience to review your IaC to make sure you aren't doing anything stupid like adding a database to a public subnet or opening up too many ports.
I do think all backend developers would benefit from having at least a basic understanding of DevOps at some point in their careers.
If you would like to learn DevOps, Zero to Mastery has a great "Become a DevOps Engineer" (affiliate link) career path that covers both AWS and Terraform.
❤️ Picks of the Week
📝 Article - Your Computer Should Say What You Tell It To Say. When you visit a website your browser sends a User Agent string that tells the website what OS and browser you are using. This is so websites can be customised for the best experience. Google want to take this further and force browsers to send a cryptographically secure message from your computer that will uniquely identify you and the software you are running. It is worth reading this so you are aware of what is being proposed.
This paragraph from the article sums it up nicely:
Putting handcuffs on every shopper who enters a store would doubtless reduce shoplifting, and stores with less shoplifting might lower their prices, benefitting all of their customers. But ultimately, shoplifting is the store’s problem, not the shoppers’, and it’s not fair for the store to make everyone else bear the cost of resolving its difficulties.
💬 Discussion - Zoom terms now allow training AI on user content with no opt out. Who needs privacy eh? If you are using Zoom at your company you might want to make people aware of this!
👾 Demo - Water. I sometimes forget that browsers can access the hardware on your phone as well. If you look at this on your mobile you can move the water around by moving your phone! I just thought this was really cool.
📝 Article - Terraform best practices for reliability at any scale. If you are learning Terraform I would give this a read. It is these best practices that can be difficult to learn if you are studying DevOps by yourself.
💬 Quote of the Week
"Anyone who isn’t embarrassed of who they were last year probably isn’t learning enough"
From Show Your Work! (affiliate link) by Austin Kleon. Resurfaced with Readwise.
📨 Are you looking to level up your skills in the tech industry?
My weekly newsletter is written for engineers like you, providing you with the tools you need to excel in your career. Join here for free →
Top comments (5)
I think it's a good idea to learn a bit of everything if you get the chance, even if you don't go too deep. While I didn't spin up machines, at one point I used to set up/manage deployment pipelines via a combination of TeamCity/Octopus. Even though the combination seems quite specific, I've found that the ideas behind it are transferable to other systems and can help when trying to pick up new things too.
TeamCity and Octopus is quite a common set up, I have used it several times, it’s good. Yes, even when I moved things over to GitHub Actions the concepts were still the same.
I 100% agree. Going outside your comfort zone always requires effort, but if you push through it you gain some extra knowledge that will help you in your career sooner or later.
It also happens that many developers stick just to web stuff, since it's easiest to get into and pays well. But they go through years of their career without even knowing what else is out there.
Why not invest a little bit of time in something you don't know yet? Maybe you'll find yourself enjoying it! :)
I always wanted to understand the whole structure. Feel like DevOps is a way to go. But only when I get a decent experience in one sphere. I can't imagine how one can master DevOps not having some prior experience.
Dude, please don't contribute to this. This is yet another post that completely misses the point about what DevOps actually is. There is no such thing as a "DevOps engineer", just as there is no such thing as a "Scrum Engineer" or a "TDD Engineer".
DevOps is a philosophy for helping software engineering organizations by teaching development and operations teams to work together by "shifting left" the responsibilities of deploying and maintaining their software. The opposite and classical way of doing things is that you have development teams (those who write code) and operations teams (those who handle deployments, infrastructure, etc) working separately in silos, not talking to one another, not caring about one another. This is an over-simplification but it's pretty much an accurate summary.
Also, DevOps doesn't mean Terraform, Ansible, Docker, Kubernetes, etc. Those are mere tools that may help you improve the situation in your organization by allowing engineers to more easily handle deployments, maintenance and infrastructure. They empower engineers to do more in a single team but in the end, they could also be used by a completely isolated operations team.
In other words, the mere concept of DevOps is already an answer to the title of your post because it's exactly what DevOps promotes: yes, software engineers should learn "devops" - the philosophy! Otherwise you end up doing exactly the same mistakes DevOps wants to help you avoid: keeping knowledge in silos, isolated, people not communicating, not collaborating.