TL:DR – DevOps is about delivering software to customers fast and reliably. DevOps is actually a cultural philosophy or approach to software delivery, however the term DevOps engineer is often applied to persons who help enable the practice in a software team.
DevOps – Development + Operation
To understand what DevOps is, we need to understand how software was delivered to users before DevOps become a thing.
- Software developers (AKA Dev team) write code based on user requirements gathered from users or based on business requirements. Then they hand over the finished software to the Operations team (aka Ops team).
- The Ops team’s job is to make the written software available to the users of the software. Ops team would deploy the software on either on-premise or cloud servers (aka – a server owned by someone who offers servers for rentage).
This approach to software delivery is often called waterfall. The Dev team must complete all requirements before delivering to Ops. Hence, it may take months before the software becomes available. – – Also, if there are any changes in user requirements while development is ongoing, it is often difficult to include in the current cycle. New requirements would have to wait…till the next changes could be planned.
The Dev team may also include a feature for which Ops does not have the infrastructure to run it on. The teams end up working in silos, not knowing what the other is doing…blames get pushed around as to why a product is failing or not available to customers…
This was the world before DevOps…
DevOps started as a way to solve the problems associated with traditional methods of software delivery. Can software be released faster, updates available even several times a day, and millions of users supported all at once (aka scalability)?
To enable the kind of software delivery desired, Google started what was called Site Reliability Engineering-SRE (circa 2003) (See ebooks) eventually evolving into DevOps and SRE roles becoming clearly defined roles in the software industry. The goal was to ensure both Dev and Ops teams work together more seamlessly while delivering quality and reliable software
What does DevOps involve today?
While DevOps is called a philosophy or approach to software delivery, software teams today must use different tools and technologies to enable this practice. The major concepts in DevOps practice today include:
- CI/CD (Continuous Integration and Continuous Delivery/Deployment)
- Software Configuration and Automation
- Cloud infrastructure services
- Containerization and Container Orchestration
- Monitoring and Alerting
CI/CD – Continuous Integration and Continuous Delivery/Deployment
- Often several developers work on the same piece of software. How do they collaborate effectively, avoid code conflicts, ensure that bug-free code gets released (Aka testing), and deploy the software to the infrastructure on which it is accessed by users? They use a continuous integration and Continuous delivery pipeline.
- A well-written article here on Kodekloud does a good job breaking down what a CICD pipeline is.
- Popular tools used to create CI/CD pipelines – Jenkins, Github actions, Gitlab, CircleCI
Setting up the infrastructure on which your application runs on manually one at a time may not be a problem when you have a few servers. But if you have several hundreds or thousands of servers to deploy and configure, you definitely need a way to automate repeatable processes. Also, while cloud providers like AWS and Azure allow you to create infrastructure using a GUI or console, using a console is not practical for large-scale infrastructure. Hence, you need a way to automate infrastructure provisioning with code. Also, each server you deploy may need certain software already configured on it for your application to use.
Popular tools for Automating infrastructure provisioning : Terraform (most popular), AWS cloudFormation, Pulumi
Popular tools for Software configuration management : Ansible, Chef, Puppet
Cloud infrastructure services
- AWS, Azure, Google cloud are common cloud services . These providers give you access to servers, and many other services that you need to deploy your applications. DevOps engineers work with these services all the time. While learning DevOps, you could start with one cloud provider and later learn how to use others as they all offer similar services.
Containerization and Container Orchestration technologies
- Applications are great when they can run reliably on any underlying infrastructure with limited worries about dependencies. But in the early days, a common problem with software delivery is the well-known phrase : “It works on my machine but doesn’t work on yours”. To overcome this challenge, containerization technologies were developed to have applications packaged into units called containers so they can run on any Operating system (Linux, windows MacOs) or environment.
- Popular containerization and container orchestration tools : Docker, Kubernetes
Monitoring and Alerting
Your software is running smoothly..but how do you know if there is a sudden failure and users can no longer access your application? How do you monitor traffic? How do you quickly recover from failures? …Think Netflix going down for several days, or your bank app going down for a 5 hours…it’s the the SRE team’s nightmare. To detect issues and respond to them immediately, you need to monitor your application. The metrics gathered can inform business decisions, plans for maintenance outages, and security concerns. DevOps and SRE teams often use these metrics to measure their performance. Its all about feedback as soon as possible
-Common tools for Monitoring and alerting : AWS CloudWatch, Promotheus, Grafana, ELK stack
How does one break into DevOps?
- An intermediate level skill with a general language programming language. Personally, I’ll recommend Python, or Golang. Free resources to use: freecodecamp python course, Codecademy, w3schools
- Learn about general computer networking. How the internet works, DNS etc
Learn about Linux OS. The cloud runs on Linux. Kodekloud.com is a great place to start with their DevOps prerequisite course and Linux basic course
Pick up a cloud provider and learn about their services. Work on labs and do a cloud certification. e.g AWS cloud Solutions Architect Associate. Acloudguru, learn.cantrill.io, are good platforms for learning
Learn Terraform. Derek Morgan’s course is a great resource
Learn and practice Docker and Kubernetes using kodekloud.com
Document your projects on Github. Talk about your projects
Network on LinkedIn, apply to roles.
DevOps is still a growing field. Much changes coming up, many more businesses adopting DevOps practice, hence a growing need for more DevOps engineers.
More resources: roadmap