What is a Devops?
So first, what is DevOps? What are the duties and responsibilities of a DevOps engineer?
There’s no official definition of DevOps as a role — it originated as a cultural philosophy, not a job title. DevOps represents collaboration between development and operations teams to deliver software faster and more reliably. As a DevOps engineer, you typically handle infrastructure automation, CI/CD pipeline management, cloud resource provisioning, monitoring and logging, automation implementations, scripting, and facilitating collaboration between teams.
That’s the theory. In practice, it’s whatever the company defines it as. Each company has its own responsibilities and definition because there’s no official reference or standard for the role — like many things in software. You might do work closer to an SRE, platform engineer, or sysadmin. You might be setting up pipelines, cloud organizational setups like landing zones, or it could be a mix of all that.
You’ll be heavily engaged with the SDLC (Software Development Lifecycle). Even though your main responsibility likely lies in building, deploying, and operating the app, you’re not limited to that. You also handle monitoring, setting up fleet agents, APM (application performance monitoring), log ingestion, building metric and performance dashboards for apps, and alerting.
If someone wants to become a DevOps engineer, what do they need?
I’ll go through the entire roadmap, but let me start with the basics. In my view, anyone who wants to become a good DevOps engineer should have a background as a developer. Why? Because you need to understand the entire SDLC — you need a holistic view of it. How will you set up a CI/CD pipeline or troubleshoot its components if you don’t know how it works from the ground up? I think this knowledge is transferable across different tech stacks. You can learn to write code in a language like Python or Node.js, which aren’t low-level languages. And even though working with languages like C# or Golang is different, the building and deployment of apps follows similar patterns — with some variations in areas like dependency management and artifact storage.
Press enter or click to view image in full size
Also, having that developer background will give you the ability to develop code solutions, write scripts, build automation, generate reports, and develop APIs for internal usage like automation triggers. I mean, you can achieve this knowledge without being a developer previously, but I think it will be a little harder to get there if you don’t have that base knowledge.
Script Language
I’m going to use this https://roadmap.sh/devops roadmap as a base. Starting with programming languages — as I mentioned before, you can learn any language, but specifically for DevOps, my recommendation would be Python and Golang. Python for its ecosystem of libraries where you can handle most DevOps tasks related to simple scripting, CLIs, and automation. And Golang because most DevOps tools like Docker, Terraform, and Kubernetes are written in Golang behind the scenes. Knowing this language will open many doors in terms of extensibility when you need to fix a provider, create your own, or build CLIs. The main reason is that Golang is very performant against an interpreted language like Python, where you can expect a little more delay because of its interpreted nature. However, it will also depend on the company stack where you work. For some cases, knowing JavaScript for Node.js apps or C# isn’t bad because even if you’re not a super expert in those languages, it will be helpful to set up CI/CD, deployment, dependencies, etc.
Operating System
I recommend using any Linux or Unix distribution — Ubuntu and Debian are the main ones, but if you use macOS, it won’t be very different.
For scripting, I recommend Bash. It’s very helpful for basic script operations, and it’s useful when you build Docker images or other types of images — for example, to build for different architectures, download dependencies, or handle file moves.
Also, if you can learn Vim or Nano for terminal editors, it will be super helpful for those situations where you’re on a server with just terminal access and need to edit configuration files. You don’t need to be an expert — just learn the basics like editing a file, adding lines, removing lines, and searching text in a file.
Git
Having a good understanding of Git will be very helpful. I recommend you read at least the basics of the Git Pro book — this is a free book https://git-scm.com/book/en/v2 that will give you the basics of Git like branches, commits, merging strategies, staging, reverting changes, and authentication with the provider via basic auth or SSH keys. You don’t need supercomplex knowledge of Git, but having the basics and more will be super useful. For code hosting solutions (version control systems), I’d recommend GitHub or GitLab — both are great options. There are also self-hosting options, but at the end of the day, it’s better to use a solution like these. Cloud providers have their own solutions too, but in most cases you’ll end up using GitHub or GitLab.
Containers
I highly recommend learning Docker — understand the basics of how it works behind the scenes, kernel sharing, and the differences between containers and VMs. I highly recommend the book Learn Docker in a Month of Lunches. Even though there are other container engines out there, I recommend starting with Docker. Also, Docker Compose is super helpful for managing containers locally and basic POCs where you need multiple containers connected — like the database, Redis cluster, background tasks, backend, and frontend. Learn volume management and mounting, building images, how to set them up, and caching images to speed up builds.
Also, it’s not shown here on the screen, but Kubernetes is super related to DevOps and SRE roles. Learn how it works, the concepts, fundamentals, when to use it, and how to set up apps locally. There are different mini clusters you can set up locally like Minikube, k3s, and the Docker default Kubernetes cluster. If you can, please learn it. I recommend two books: Learn Kubernetes in a Month of Lunches and Kubernetes Up and Running (3rd edition). Cover the basics of node management, control plane, etcd, components of a cluster, and resources like services, ingress, load balancers, namespaces, replica sets, deployments, pods, volume sets, volumes, daemon sets, CRDs, and networking with Docker and Kubernetes (containers in general). also if you have the option to mound your won cluster from scratch will give you a deep understanding of kubernetes
Load Balancers
This is very helpful because you need to forward traffic to applications — so knowing how to do it with load balancers is essential. I recommend learning reverse proxies like Nginx and Traefik (which isn’t listed here). There are also cloud-focused options like AWS ELB or Azure Load Balancer, which are compatible with Kubernetes setups via ingress — for example, the AWS Load Balancer Controller for EKS. Learn the different load balancing strategies. Rather than caching servers, I’d say caching solutions like CDNs are more important — these optimize requests before they hit the server. Also look into proxy servers and firewalls like security groups where you define rules for inbound and outbound traffic — what’s allowed or denied. You may not need to set them up yourself, but understand the use case and where they fit.
Write on Medium
As you can see, a good understanding of network concepts will be very useful. Even if you’re not expected to be a network engineer, having more than the basics will be more than enough for most normal use cases.
Networking & Protocols
Do you know how DNS works? When you create a request from your local machine or a VM in the cloud, do you know how it gets routed to where it should end up? Do you understand DNS hosted zones, domains, and DNS servers? What about types of records — A, AAAA, TTL, CNAMEs, SOA, subdomain delegation? What about HTTP protocols — the meaning of the acronym, why it’s needed, what a Certificate Authority is, why some are accepted and others not? What is HTTPS? What about SSL and TLS termination? I don’t think you need to understand the depths of the TLS protocol, but if you can, take a look to understand what’s needed when a request is created at a deep level. Also, SSH and RDP — when you need to get into a server via remote connection, knowing how to make it secure, manage open ports, and understand the fundamentals is important. Most of the time, TLS termination is handled by load balancers, but there will be some use cases where you’ll set up your own Private CA to sign your own certificates for private TLS validation. It’s not very common, but if you know how it works, it will be valuable.
Press enter or click to view image in full size
Understanding the OSI Model helps you grasp the different types of load balancers. For example, in the cloud you’ll commonly find application load balancers (layer 7) and network load balancers (layer 3 and 4 for TLS).
Cloud Providers
I highly recommend learning AWS, with Azure or GCP as a second option. It will depend on the company where you work, but AWS is the gorilla of the cloud. If you can, learn the fundamentals of networking, identity and access management, and core services like EC2, ECS, S3, EKS, EBS, Lambda, CloudWatch, etc. And obviously the DevOps services like CodePipeline, CodeBuild, and CodeDeploy. I think talking about cloud providers deserves an entire video, but for now I can tell you that based on my experience — client support, services, documentation — the best is AWS. I haven’t used GCP, so I can’t give you a review of it.
Models of Compute, Services
Estos son diferentes modelos de servicios en la nube que definen el nivel de responsabilidad entre el proveedor y el usuario:
on premises
iaas
paas
saas
faas
Press enter or click to view image in full size
Iac Tools
I recommend learning Terraform above any other IaC provider. Why? Because of its modularization, cloud and service agnostic nature, extensibility to build your own providers, and many other benefits. If you work with different cloud providers, you have a tool that can be used across all of them. With a good understanding of it, Terraform can simplify a lot of things with DRY (Don’t Repeat Yourself) configuration. If you’re working with AWS, also learn how to use AWS CloudFormation and AWS CDK — these are the main foundations of IaC for that cloud. Serverless Framework can be used sometimes as well.
CI/CD TOOLS
First, what is CI/CD?
CI (Continuous Integration): A software development practice where developers regularly merge their code into a central repository. After each merge, one or more automated builds are initiated and tests run against the committed code. The main goal is to detect and address integration issues early by automating the build, testing, and validation processes. With CI, developers integrate their changes often, and each integration triggers an automated build and test process to ensure code quality and compatibility.
Continuous Delivery: If deployment to production occurs with continuous delivery, there will most likely be a manual approval process rather than an automated deployment. CD focuses on ensuring that software is always in a releasable state, but the actual deployment decision is made manually. The software goes through automated build, testing, and validation processes to ensure it’s ready for deployment. Once the software is deemed ready, it can be deployed to production at any time — but the decision to deploy is typically made by a human. CD provides the flexibility to release software frequently and reliably while still allowing for manual approval before deployment.
CD (Continuous Deployment): There is no manual approval process — code revisions are pushed directly into the production environment. Instead, teams rely on testing practices and guidelines to ensure the code meets quality checks before being automatically deployed to production.
Among the CI/CD providers, I recommend learning GitHub Actions. GitHub provides courses on how to use it, and its documentation is excellent. If you need examples, most open source libraries on GitHub have their CI/CD setup public — you can see how they trigger workflows when a pull request is opened or when there’s a merge to the main branch. GitLab CI is also great, especially with its templates. Both are excellent options. I’ve set up hundreds of actions with both, and I can tell you either one is a solid choice. Also, make sure to understand runners and try building your own. As I mentioned before, learn the CI/CD services of AWS or any other cloud provider that interests you in case you need them. For example, in specific cases where you need to set up CI/CD connected to the same VPC as your server or app, it’s more difficult to configure runners from other solutions — so take that into consideration.
Everything is a TradeOff
though this image recommends HashiCorp Vault, I advise you to learn what fits best for you. In my case, I’ve only used cloud secret managers like AWS Secrets Manager and Azure Key Vault — both work well for their use cases. The same applies to infrastructure monitoring and log management. In my experience, I’ve used Grafana, Elastic, Splunk, New Relic, and AWS CloudWatch, and I can tell you that even though they have some differences, in general they’re pretty similar. So knowing one well and depending on your needs is okay — as long as you understand the different components of the observability stack: logs, metrics, traces, OpenTelemetry spec, fleet agents, APM, RUM (or browser monitoring), synthetics. For me, I like Elastic more, but any of them is fine depending on the tradeoffs and your needs. Same case for artifact management
Cloud Design Patterns
https://aws.amazon.com/es/architecture/well-architected/ Rather than going into specific concepts like availability, management, etc., I recommend taking a look at the Well-Architected Framework — which is very similar across clouds and gives you a solid foundational knowledge of cloud setups and best practices.
https://roadmap.sh/pdfs/roadmaps/devops.pdf
References
https://www.reddit.com/r/devops/comments/1f7b1ix/what_is_devops_really/
https://medium.com/@acontreras-mp/devops-and-sdlc-software-development-life-cycle-43cca504d09a
https://aws.amazon.com/es/architecture/well-architected/
https://www.reddit.com/r/sre/comments/1mo453d/what_is_the_difference_between_devops_sre_and/
Top comments (0)