A Quick What, Why and Who of DevOps
I’ve spent some time trying to formulate a clear and concise definition of what DevOps is but then, I’ve remembered one of my favorite definitions from Microsoft’s Partner Manager Donovan Brown and his team:
“DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.”
The main idea of DevOps is to, in an organization, have the “right” mix of automation, collaboration, integration, deployment, testing and management. The definition of “right” really depends on an organization and where they’re currently at in their DevOps journey and that definition of “right” can also change over time as the organization evolves.
By gradually adopting a DevOps culture, organizations can shorten their development cycles and therefore, allowing them to deliver software and value more frequently and with the highest quality. This also promotes for more agility and confidence to innovate more in order to bring even more value to their customers. Furthermore, DevOps practices can lead to better collaboration, communication and transparency across the development and operations teams - you’ve probably noticed that the word “DevOps” is a combination of the word “Development” and “Operations” and that’s pretty much what it is! Due to all the benefits, there’s a rising demand for DevOps implementation and practices in organizations.
To be honest, I don’t think that just having these last couple of sentences will fully do justice to DevOps. There are whole articles on the web dedicated to the subject and value it brings to organizations, end users, stakeholders and more (compared to more “traditional” SDLCs), the challenges and the fact that the DevOps processes themselves in an organization, just like the products, should also continuously be improving. However, I’ll leave it at that for now so we can focus on the main idea of this article (which is why you’re here for!).
What’s a DevOps Engineer?
As a DevOps Engineer, you’ll be the bridge between the (potentially siloed) development and operations teams. You’ll be expected to work closely with them to implement the processes and tools necessary to bring all the values that DevOps stands for. As a result, you should have the technical skills of both the development and operations sides as well as interpersonal skills in order to bring everyone together (we’ll however just focus on technical skills in this article).
All right, now let’s have a look at the 10 concepts that I think you should grasp before diving into DevOps. For each concept, I’ll give a brief explanation on why it’s important for you to understand as a future DevOps engineer and also, some links to articles to help you get started.
1. Programming Language
You don’t need to have deep knowledge of a programming language like a software developer would or to understand each line of code of the application that you’ll be packaging and deploying. However, you should know enough in order to understand what is required to compile (if required), test, package and deploy the application and, most importantly, how to troubleshoot in case of a compilation and/or deployment failure.
I’ve mentioned it briefly earlier but something that shouldn’t be overlooked is to integrate automated tests (these tests should come from the development team) and static code analysis (using a tool like SonarQube or a linter) in your DevOps flow (CI/CD pipelines) to ensure the code being deployed is always of the highest quality, clean, safe and compliant to the organization’s standards.
Where to get started
2. Git
Development teams use a code repository to store their work and collaborate with each other. Right now, Git is the most popular one and I’ll therefore strongly suggest that you learn Git and how version control works. Once you understand Git, you’ll need to know what’s the branching strategy of the development team(s) you’ll be working with in order to build the CI/CD pipelines (using an automation tool that we’ll see later on) that will make the most sense for them and their workflow.
Where to get started
- Setting up a Git repo (for example on GitHub or Bitbucket)
- Git Commands
- Git Branching
- Pull Request
- Be familiar with different Git Workflows
3. Scripting Language
When working in DevOps, since you’ll be working with both people from the development and operations team, you’ll most likely want (or will be asked) to automated some tasks and processes in order to make life easier for your teammates and scripting languages will empower you to do that. For example, you could have scripts for scheduled backups, system monitoring, etc. Also, you could write scripts and have them integrated in your CI/CD pipelines in order to make them more concise or to execute some tasks in order to ensure compliance with your team or business.
Where to get started
4. Operating System (Windows and/or Linux)
It’s important to understand the basics of an operating system because you’ll most likely have to setup some machines as part of your job in DevOps whether it’s an on-prem machine or in the cloud. For example, one of your tasks might consist of setting up machines to host your applications or to be used as private custom build agents (machines that are used to build and deploy your applications in a CI/CD flow). The OS you’ll work with depends on your organization, but I’d suggest to at least understand the basic commands and filesystem of at least Windows or Linux (both if you can).
Where to get started
- Basic commands and filesystem
- Windows
- Linux
5. Basic Networking
As a DevOps engineer, you’ll work and interact with multiple components that communicate with each other over multiple networks. As a result, it is crucial that you understand basic networking concepts as well as how to troubleshoot network-related issues.
Where to get started
- Know how to troubleshoot basic networking
- Basic Networking Commands (Windows and Linux)
- Firewall
- VNET and Subnet (on Azure)
- Load Balancer
6. Containers
Containerized applications are portable, scalable, lightweight and secure and therefore, businesses have started to adopt that model for their application development. Docker is currently the industry’s standard when it comes to containers. In the same vein that a DevOps engineer should understand how the development team works, you should understand how containers work.
Where to get started
- What are containers
- Getting Started with Docker
- Dockerfile
- Container Registries (Docker Hub, Azure Container Registry, etc.)
7. Container Orchestration
When working with large containerized applications, these applications can be composed of multiple microservices (each represented by a container) and deployed to multiple environments. As mentioned earlier, one of the benefits of working with containers is their dynamic scalability. While this is good for the application and the end-users, for an operations team, manually managing the lifecycle of all those containers across multiple environments can quickly become a real nightmare.
Container orchestration tools provide you a proper and elegant way to manage all of your containers. The current most popular container orchestration tool is named Kubernetes (or K8s) and I strongly suggest for you to get familiar with it if you’re going to work with containerized applications and DevOps. Cloud providers also offer their own managed Kubernetes services such as Azure Kubernetes Services (AKS), Google Kubernetes Engine (GKE) and Amazon Elastic Kubernetes Service (EKS).
Where to get started
- Kubernetes
- Azure Kubernetes Services
- Amazon Elastic Kubernetes Service
- Google Kubernetes Engine
- Docker Swarm
8. Infrastructure as Code (IaC)
When working in DevOps, not only you’ll have to automate the deployment of applications’ code across multiple environments, but you should also consider automating the deployment of the infrastructure that will host your applications such as the network, VMs, load balancers, etc.
Infrastructure as Code (IaC), which refers to the management of your infrastructure using code, enables you to quickly and consistently deploy and configuring the same environment using your CI/CD pipelines. Also, you can version control your infrastructure’s code like you would with application’s code. For more information about IaC, you can refer to this article by Microsoft.
Again, like the other concepts we’ve seen so far, multiple tools are at your disposition to empower you to work with IaC. To deploy your infrastructure, you have tools such as Terraform and Azure Resource Management (only for Microsoft Azure resources). Finally, to configure your environments, you have tools such as Ansible, Chef, Puppet and PowerShell DSC.
Finally, since you should be treating IaC like applications’ code, you should also consider integrating static code analysis (like a linter) as part of your CI/CD flow. Whether you’re using JSON, YAML, Ansible or any other languages we saw earlier, there should be a linter specific to that language.
Where to get started
Infrastructure deployment:
Infrastructure configuration:
9. Automation Tools
Once you’ve familiarized with all the above concepts and tools, we can finally look into the automation tools that you can use to build your CI/CD pipelines that will build, test and deploy your code. Once again, you have a few very good options that are available to you such as GitHub Actions, Azure DevOps, and Jenkins. I would personally suggest you to start with either GitHub Actions or Azure DevOps due to their popularity and features. The knowledge and experience you’ll gain from either of those platforms are relatively easy to translate to another platform.
Where to get started
10. Cloud Provider(s)
Finally, last but not least (I really mean it), you should learn at least one cloud provider!
Over the last couple of years, the cloud market popularity has drastically increased and with the recent pandemic of 2020, that fact is truer than ever. Cloud providers enables businesses to host their infrastructure, network and applications virtually in the cloud instead of physically in their own datacenter (on-premise). This practice results in, as you can imagine, multiple benefits for businesses such as on-demand infrastructure scalability, no on-premise hardware is required (even though a hybrid cloud model is possible), security and advanced threat protection, simple and effective disaster recovery and much more. This enables businesses to focus on what really matters to them such as user-experience, retention, sales conversions, growth, etc. (instead of operational tasks)
Without wanting to sound like a salesperson, I hope that these few lines helped you realized the importance of cloud providers nowadays and why businesses are either building their applications in the cloud or are considering migrating to the cloud. That’s why, as a DevOps engineer, it’ll be important for you to learn at least one cloud provider and once you learn one, you should be able to transpose the knowledge to other cloud providers.
As of now, the most popular cloud providers are Microsoft Azure, Amazon Web Services (AWS) and Google Cloud Platform (GCP). I’d suggest you to start with either Azure or AWS since they’re both currently the 2 most popular ones. Once you’ll start to dig into one of them, you’ll realize that there are A LOT of services and features that they provide and obviously (and thankfully), you don’t have to learn all of them but just enough to be able to build and deploy what you need.
Where to get started
Conclusion
Wow, it’s been quite a ride! If you’ve reached this part of the article, thanks for hanging around with me and I hope you were able to gain value from it and that it gave you a clearer vision on where to start from where you’re currently at to move toward a DevOps engineer position. As you could see, there are quite a lot of skills involved and it is also why it’s so valuable and also why we need more people in this field!
Again, and as always, I’d love to hear your feedback and if you have any questions or something you’d like to add based on your experience, please let me know in the comments section below!
If you’d like to see more content like this in the future and keep in touch, feel free to follow me on Twitter and LinkedIn!
Good luck and happy learning!