What is DevOps?
Tags: devops, operations, docker, kubernetes
Published: 2022-02-13 14:25:18

We have been hearing a buzz word DevOps which is gaining popularity in recent times. But what is actually is?

Is DevOps = Development + Operations ? Where do boundaries start and end? Which part of Development is not DevOps? Which part of Operations is not DevOps? Why was there a need for this? Let's see ... 

We all know development and operations are the main important things in the whole application release process.
Development -> Operations -> Release

**Initial Software Release Process **


![Software-Release-Management.jpg](https://cdn.hashnode.com/res/hashnode/image/upload/v1644581921697/cH8KiGhTF.jpeg)

As you see above the whole process includes : 

1. The idea of Application comes up.
2. Team gathers all the requirement 
3. Developer Team codes the project
4. Testers test all sorts of test cases.
5. Then it's built and Deployed, Operated, and monitored.

All future updates and features are monitored and are being pushed.

**After Launch of Application **

- Is there any problem with the application?
- Are users experiencing any issues?
- Can the application handle higher user loads?


Based on the above questions all sorts of new features are added, bugs are fixed and performance is optimized.
And the big part of this is that whenever new changes or fixes are made, it has to be accessible to the user immediately.

This process gives us a new term the **Software Versioning** which gives an endless cycle of improvements and continuous delivery of applications. And **DevOps** is making this process : 

1. Fast 
2. Bug-free**** or minimal errors.
*With DevOps improvements are delivered to users fast and they are of high quality and well-tested*.

**Challenges that DevOps tries to solve **

**Miss communication and lack of collaboration**
- Developers code the app but can't deploy and run the app whereas Operations deploy and operate the app but don't know how it works.
- Developers don't consider where the app gets deployed.
- Deployment guides are not well documented, so release takes longer.
These stretches release period for weeks, days, or even months.


 **Conflicts of Interest **
- Developers want new features fast while Operations wants to maintain stability.


**Security**
- Developers code it, test it, and build it.
- Operations care about the system's stability and security.

**Application testing**
- Testing specific features.
- End to end tests.
- Testing on different environments.
- Performance tests.

These tests are often done manually and it takes a lot of resources and time but also we can't rely on fully automated tests.

**How DevOps can be used as a solution?**

First, let's see some info about DevOps,
DevOps is a combination of cultural philosophy, practices, and loads.
- Anything that creates the process of releasing the software fast and with high quality.
- Main part was that **dev** and **ops** should work together and more often.


**How DevOps can be seen as a separate role ?**

Previously, companies adopted different methods but gradually as it became more common they have now more common practices like - 

**1. Planning and Collaboration.
**
**
2. Source code management and Package management.**
**
3. CI/CD**
**4. Infrastructure as A code(IAAC).**
**
5. Container Orchestration**
**6. Cloud**
**7. Continuous Monitoring**
With these, DevOps evolved as separate roles as either developer doing DevOps or operations doing DevOps or someone is doing DevOps exclusively.


**CI/CD Pipeline
**


![CICD_CICD.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1644583719718/dD1g39BWn.png)

This picture describes DevOps. Or A CI/CD pipeline is a series of steps that must be performed in order to deliver a new version of the software. Continuous integration/continuous delivery (CI/CD) pipelines are a practice focused on improving software delivery using either a DevOps or site reliability engineering (SRE) approach.


**Tools and concepts to know while learning DevOps**

**Concepts of Software Development (Development)**
- How developers work.
- Git Workflow.
- How the application is Configured.
- Automated Testing.

**OS and Linux Basics (Operations)**
- Preparing infrastructure to run applications.
- CLI comfort.
- Shell Commands.
- Linux file systems.
- Server Management Basics.
- SSH keys.

**Networking and Security**
- Firewall proxy servers.
- Load Balancers.
- HTTP/S.
- DNS, IP, etc.

**Containers**
- Virtualization.
- Able to work with containerized applications ex - Docker.


**Understand Packaging**

**Cloud Providers**
- AWS or Azure or GC
- only learn services you need.

**Container Orchestration**
- Kubernetes - deploy manage.

**Monitoring**
- Monitor software.
- Monitor infrastructure.
- Ex - Prometheus or Nagios

**IAAC**

- Terraform.
- Ansible.

**Scripting Language**

- Go, python or ruby.


You may be overwhelmed by thinking about why this many tools and concepts but Learn only one and most popular tools in each category and learn only those services which are needed.
You can see the reference image below - 

![1__eJaw96xLBR-xEzlwbTOyw.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1644584507236/g8pjo65Jq.png)

Thanks for Reading!!