What is DevOps? How do I get started?
Published: 2022-08-28 19:06:58

**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 image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7k0l2wbod8tgwdg56u7.jpg)

**DevOps - Development + Operation**
_What's that?_
To understand what DevOps is, we need to understand how software was delivered to users before DevOps become a thing.
- Software developers (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 (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 (a server owned by someone who offers servers for rent).

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... 
Enter 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 (scalability)?

- To enable the kind of software delivery desired, Google started what was called Site Reliability Engineering-SRE (circa 2003)  [(See ebooks)](https://sre.google/books/) 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 (A.K.A 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](https://kodekloud.com/blog/ci-cd-pipeline-in-devops/) 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

**Automation**
- 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 hundred 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,  and Google cloud are popular 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 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](www.kodekloud.com) is a great place to start with their DevOps prerequisite course and Linux basic course

- Learn Ansible.
- 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](https://morethancertified.com/course-resources/more-than-certified-in-terraform/) is a great resource
- If possible, sign up for a DevOps bootcamp. e.g [techworldwithnana](techworld-with-nana.com), [Darey.io](Darey.io). You get to work on projects, build a portfolio you can show recruiters.
- Learn and practice Docker and Kubernetes using kodekloud.com 
- Document your projects on Github. Talk about your projects
- Network on LinkedIn, apply to roles.

So far, we have considered what DevOps is all about and the skills you need to have. Perhaps, you are wondering, 'How long will this take to learn? (I get...You want to land a role as soon as possible), 'How can I land my first role?' 'What strategies can I use to get a foot through the door and break into DevOps roles?'. 
To answer those questions, check out this nicely written article by Stuart Burns - [How to Become a DevOps Engineer in Six Months](https://spacelift.io/blog/how-to-become-devops-engineer). It is a detailed article explaining what path to take to become DevOps and what skills are best to learn at the beginning. You can also find tips on how to get a DevOps job in  for example, how to structure your resume.

DevOps is still a growing field. Much changes coming up, many more businesses adopting DevOps practice, hence a growing need for more DevOps engineers. So, Keep learning, keep building and have fun doing it.

More resources: [roadmap](https://roadmap.sh/devops)