If you’re attempting to implement automation in and around your deployments, you’re going to find there is quite a steep learning curve for DevOps and DevOps-style implementations. Since adopting a DevOps-style release cycle does, at least in theory, speed your ability to deliver better code safely, why would it be hard?
Why is there a Learning Curve for DevOps?
I recently did a presentation on a simple Continuous Integration process. Here are the tools that I used in the demo:
Local Git repository
VS Code
Azure Data Studio
AWS CodeCommit
AWS CodePipeline
AWS CodeBuild
AWS RDS PostgreSQL
Shell commands
YAML
Docker
Flyway
Also, I regularly present using Azure DevOps Pipelines too. Here’s the list of tools that might be in a given demo:
Local Git Repository
VS Code
Azure Data Studio
Azure Git Repository
Azure DevOps Pipeline
Azure DevOps Agent
Redgate Deploy
Azure SQL Database
YAML
PowerShell
tSQLt
While there are some overlaps between these two lists, you can see that each, on their own, represents a whole slew of tools.
Why?
Implementing DevOps Is Easy
Well, let’s break that statement down just a little. After you develop a core understanding of all the tools necessary to implement a DevOps-style automation of your build processes, implementing it is easy. However, you’ve got to learn a lot of stuff first.
Why so many tools? The simple answer is, this is complex. You’ll note first, there are two sets of source control in both tool chains above; one local and one in the cloud. Nominally they are controlled the same way, in my case using either VSCode or ADS. However, there are distinctions and differences in how we use a local repo and a shared repo. That alone entails some learning time. All these separate tools do different things, enabling you to build out a custom process for your unique set of circumstances.
Then you have to learn how to build out the necessary commands for each of the tools, integrate the tools, chain them together with a flow control software such as Jenkins, Octopus, AWS CodePipeline or Azure DevOps Pipeline. Learn how to control Docker, VMs, Flyway, Redgate Deploy, or what have you, all from a set of shell commands.
Plugging them together just becomes labor, but you have to learn them all first. This is because there’s not one single, simple, path, that will satisfy everyone, everywhere. You have different needs than I do, so you’re going to use different tools and different processes to fit those needs. That means learning all those tools. So yeah, there is quite a learning curve for all this.
Conclusion
Hopefully this post helps you understand why there is a learning curve. After that, the next question I invariably get is, OK, but how long is that learning curve? Honestly, it varies from person to person. For example, I struggled to get AWS CodeBuild to work correctly. Until I finally realized how easy it was to just plug in the appropriate shell commands in the buildspec.yml file. Now, I’m not completely stupid, but we’re talking weeks to achieve that understanding. Whereas, now you know how easy it is and where to focus. It won’t take you weeks.
So, the key is, find people who are doing what you want to do and learn from them. That short circuits the learning curve somewhat.
Yeah, I’m going to say that implementing DevOps is easy. However, learning how to implement DevOps, that’s hard.