According to the 2015 State of DevOps report, “high-performing IT organizations deploy 30x more frequently with 200x shorter lead times; they have 60x fewer failures and recover 168x faster". Additionally, DevOps teams experience 24x more active recreation from crashes, 3x lower moderate failure meter, 22% less experience wasted on unplanned work and rework, and 50% less time remediating safety concerns [5]. According to those statistics, DevOps helps companies and projects to grow, so let's take a look at its principles, practices, and tools.
First of all, what is DevOps?
DevOps stands for development and operations. It is a set of actions that aim at merging development, quality assurance, and operations (deployment and integration) into a single and continuous set of processes [1]. The main goal of DevOps is to shorten the systems development life cycle and provide continuous delivery with high software quality. More than a set of actions, DevOps is a culture that aims to improve cross-functional team communication. In other words, DevOps is more about teamwork and its success depends on the principles and practices that DevOps teams use.
On one side, DevOps started to be used because development teams faced problems such as on-time delivery and long release cycles. On the other side, the operations team had to manage resources as its demand increases, handle the application needs for execution in the production environment, and diagnose and resolve production-related issues. To address the aforementioned problems, DevOps came into play. That is, by implementing DevOps, the development and operation teams do not work in isolation anymore, testing and deployment are phases included in the development phase, team members are able to focus on the business services instead of spending time in testing, deploying, and designing, consequently avoiding errors in production by automating the process, and avoiding delays since deployment and operations work together now and have similar timelines.
To incorporate DevOps into your company, it is important to first take a look at the DevOps principles and practices.
DevOps Principles [2]
-
Incremental releases: When developers have to wait a long time to commit code and test, errors and incompatibility issues may arise. In DevOps, teams commit their code in increments (sometimes many times a day). With that, it is possible to have incremental releases, and as a consequence, teams will be able to respond faster to problems that may arise.
-
Automation: This might be the most critical part of doing DevOps! In DevOps, it is necessary to automate as much software development as possible. This will allow teams to focus on only writing code, while the automation does the job of building, testing, and alerting the developers in case of a problem.
-
Pipeline: this is a set of tasks that the code needs to pass in order to be deployed into production. That is, first the code needs to be developed by the teams, then a build needs to be created by compiling the code. After building, tests can be executed in order to guarantee that the behavior of the source code is as expected. Finally, the code can be deployed to the end-user.
DevOps Practices
-
Continuous Integration and Delivery (CI/CD): This principle encourages developers to commit their code to a central repository multiple times a day (CI), then releasing code updates should be done often and quickly (CD).
-
Microservices: microservices are a set of independent services that communicate with each other but are developed, deployed, and maintained independently. With the high rate of deployment in DevOps, microservices help to keep the system stable, while fixing problems in isolation.
-
Communication and collaboration: information sharing and easy communication through chat, issue tracking systems, or wikis are crucial to make DevOps successful. This helps to have effective communication and goal alignment among different teams.
DevOps Tools
The main goal is to automate the delivery pipeline and the integration process. For that, many tools can be used as shown in the Figure below.
Continuous Delivery Pipeline and Tools (Image extracted from [6])
Each step of the delivery pipeline should use a specific tool that should be chosen according to your needs. To help you choose your tools, we have separated the top 10 most used tools in DevOps:
- Git for coding and building
- Slack for communication
- Jenkins for building, testing, and deploying
- Puppet for deploying and operating
- Docker for building, deploying, and operating
- Selenium for testing
- Kubernetes for building, deploying, and operating
- Elasticsearch for monitoring
- Tencent Cloud, AWS, or Azure for Cloud Computing Storage
- Prometheus for storing data and monitoring.
TLDR-summary:
DevOps is a life cycle investment, is team undertaking, enables better software development and delivery practices, and accelerates continuous delivery.
About the author:
Isabella Ferreira is an Ambassador at TARS Foundation, a cloud-native open-source microservice foundation under the Linux Foundation.
References:
[1] https://www.altexsoft.com/blog/engineering/devops-principles-practices-and-devops-engineer-role/
[2] https://phoenixnap.com/blog/devops-principles
[3] https://www.altexsoft.com/blog/engineering/devops-principles-practices-and-devops-engineer-role/
[4] https://puppet.com/resources/report/2015-state-devops-report/
[5] https://puppet.com/blog/2017-state-devops-report-here/
[6] https://www.bogotobogo.com/DevOps/DevOps_CI_CD_Pipeline_Sample.php