4- What is DevOps? What are the benefits? What tools does it use?
Tags: devops, devopstools, ansible, vagrant
Published: 2022-02-28 12:10:00

> A compound of development (Dev) and operations (Ops), DevOps is the union of people, processes and technology to continually provide value to customers. _Microsoft_

> DevOps is the combination of cultural philosophies, practices, and tools that increases an organization’s ability to deliver applications and services at high velocity: evolving and improving products at a faster pace than organizations using traditional software development and infrastructure management processes. _Amazon_

Here I am again with the 3rd article of the Advanced Software Development article series. I wanted to start by giving the definition of the term DevOps by two big companies. If you've come this far by reading the series, it's fine. If you came directly to this article, I suggest you read the [0- Advanced Software Development](https://dev.to/hamitseyrek/0-advanced-software-development-23ak) article.

Microsoft and Amazon's DevOps definitions actually summarize DevOps very well. We can say that DevOps is not a tool, a set of tools. I would say that DevOps is not a subset of CI/CD, as most blog posts imply, but rather consists of continuous planning, continuous integration, continuous delivery, continuous testing, continuous monitoring, implicit feedback, and traceability. DevOps is as much about the culture as it is about the tools it uses.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/igy9p977k4va7ug0a82a.png)
State DevOps is not easy to adopt. Information flow, shared responsibilities, learning from failures and adopting new ideas are very important for the formation of this culture. With the adoption of DevOps, the biggest advantage that comes with team building and each member having responsibility is to provide more control while developing the application without slowing down. Because everyone will pay more attention to their steps with a sense of responsibility.

The formation of this culture is a significant challenge and requires professional attention. [The 2015 State of DevOps Report](https://puppet.com/resources/report/2015-state-devops-report) listed the top 7 metrics with the strongest correlation to corporate culture as follows:

**1- Institutional investment
2- Experience and effectiveness of team leaders
3- Continuous delivery
4- Communication of different disciplines (development, operations and information security)
5- Organizational performance
6- Development issues
7- Lean management practices**

---
**In order for the culture to be adopted and DevOps to be realized;**

**Architecturally important requirements**
To effectively implement DevOps, software applications must meet a number of architecturally important requirements, such as deployability, interchangeability, testability, and monitoring capability.

**Micro Services**
While in principle it is possible to implement DevOps with any architectural style, the micro services architectural style is most commonly used for building continuously distributed systems.

**DevOps Automation**
It also supports consistency, reliability, and efficiency within the organization and is often enabled by a shared code repository or version control.

> Through DevOps, there is an assumption that all functions can be executed, controlled and managed in a central place using simple code. _Ravi Teja Yarlagadda_

**Version Control**
Many organizations use version control to support DevOps automation technologies such as virtual machines, containerization (or OS-level virtualization), and CI/CD. All developers need to make changes to the same codebase, and sometimes even edit the same files. For efficient work and to avoid conflicts, Git version control system (Github, Gitlab, Bitbucket etc.) should be used.

---
We talked about DevOps tools throughout the article. To give an example of a few of the most preferred:

**Communication:** Many companies working around the world use **Slack** for team communication. It is very successful in communication related to the workflow.

**Continuous Integration (CI):** Many of the tasks involved in the software development lifecycle (SDLC) can be automated with **Jenkins**. In this system, where all tests can be carried out automatically, if a certain sprint causes a broken structure, the system will inform you thanks to quick feedback.

**Containerization:** **Docker** is the most popular tool that allows applications independently of the running environment to be packaged, deployed, and run. This technology, which allows more than one container to be created on a single operating system, reduces costs. Most of the enterprise companies have preferr Docker for containerization.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7j2xafm6m18z24vub567.png)

**Security:** A safer development can be achieved in all phases of SDLC with the **Phantom** tool, which provides DevOps engineers with options such as device or file quarantine and reduces the risks that may occur. If we bring together the fact that security is the most important component for DevOps and the fact that Phantom has many features for this, it will be understood why this is the most preferred one. 

**Management:** By allowing to create or manage developer virtual machines in a single workflow, the **Vagrant** tool eliminates the "works only on my machine" excuse, allowing the project to remain the same on all developers' machines. Another management tool, **Ansible**, is an editing and configuration management tool that provides simple usage opportunities as well as effective. It is not very affected by the resources used in the background of the device. It is used to make new changes within the existing system or to configure newly installed servers. Reducing infrastructure costs is among the reasons for preference.

**Version Control:** Undoubtedly, the most used version control system is the **Git** system, as you all know. Thanks to its easy and widespread use, **Github** is the most preferred tool. The commit system, it is possible to revert to the desired version instantly. Changes to the code are instantly communicated to team members with notifications. Developers can also choose **Gitlab** or **Bitbucket** tools to meet the paid features of Github with less cost. Bitbucket's easy integration with Jira and Trello can provide an advantage.

**Development Issues:** Ruby, Swift, JavaScript, PHP etc. **Sentry** tool, which has customizable SDKs to support many languages or frameworks such as Microsoft, PayPal, Pinterest, is one of the most used DevOps tools for bug detection. For example, with the integration that can be done quickly in frameworks such as Laravel and SwiftUI, you can easily catch every possible error with Sentry.

---
Now, a question may have in mind!

**What does DevOps have to do with advanced software development or code quality?**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5idyam60tx7ciqxhbha.jpg)

DevOps aims to better connect development and operations teams with each other. In other words, there are two teams in the middle and it facilitates communication. If you are working alone or with 2-3 people today, you do not need to use the DevOps model. You can use some of its tools, such as Git, but you don't need to fully adopt it. If your goal is to work in large corporate companies, it is useful to have a general knowledge of DevOps. Because most of the large-scale companies today have either adopted or are considering the DevOps model. To be a part of such a team, you should not be unfamiliar with the technologies that such teams use and the cultures they adopt.

We are in a fast developing industry. We need to be in constant research and study. If you search, you can find more detailed documentation about the tools DevOps uses.

In the [Advanced Software Development](https://dev.to/hamitseyrek/0-advanced-software-development-23ak) series:

Previous article: "[3- Why Should I Write Tests While Developing Software?](https://dev.to/hamitseyrek/why-should-i-write-tests-while-developing-software-2pfm)".

Next article: "[5- What is Continuous Integration and Continuous Delivery? Why should it be used?](https://dev.to/hamitseyrek/what-is-continuous-integration-and-continuous-delivery-why-should-it-be-used-13en)".

Don't forget to like if you think it's useful :)

Always get better...