DevOps, like other Agile practices, is focused on teamwork, where all aspects of the software life cycle are considered, from the program code to the operation of the product by the end user:
Code – development and analysis, version control and code merging;
Build – continuous integration of various assemblies;
Test — Continuous testing that provides feedback on business risks;
Operate (Work with packages) – repository of artifacts, pre-installation of the application;
Release – change management, formal release approval, release automation;
Deploy – Infrastructure management as code;
Monitor – Monitor application performance, end user experience.
DevOps Processes: Development Operations
DevOps Processes: Development Operations
DevOps goals and objectives
Since devops processes cover the entire software delivery cycle, there are several main goals of this approach:
- reduced time to market;
- decrease in the failure rate of new releases;
- reducing the time it takes to complete fixes
- reducing the amount of time to recover when a new version fails or other cases of shutdown of the current system.
These goals are achieved through the solution of the following tasks:
coordination of software development and delivery processes with operation;
automation of development, testing and deployment processes;
continuous testing of application quality;
IT infrastructure management as code;
continuous monitoring of application performance and infrastructure health.
Thus, DevOps is focused on predictability, efficiency, security, and maintainability of operational processes, as well as regular delivery of a reliable product, its updates and maintenance.
Core DevOps Principles
Considering DevOps as scaling the Agile approach for the entire process of software development, implementation and maintenance, we can single out 5 basic principles (CALMS) of its implementation in order to increase the frequency of releases and increase the team’s responsibility for the product:
Culture (Culture) – cross-functional cooperation of diverse specialists and teams through a single information space of project content, open communication channels and constant communication of all participants;
Automatization – using continuous delivery tools to run each code change through a series of automated tests, often using cloud infrastructure, and then packaging successful assemblies and then moving them to a production server using automated deployments and managing infrastructure as code through self-deploying environments configurations;
Lean – eliminating actions with low utility and speeding up processes, continuous improvement through regular retrospective analysis, separate testing of various tools, acceptance of failures, the ability to quickly detect problems and solve them immediately;
Measurements of performance, for example, the duration of users’ work with the product, the frequency of critical error messages in the logs – clear and precise criteria for evaluating work, indicators of process efficiency are needed;
Sharing – joint responsibility and sharing of successes, release and maintenance of the application are carried out by the same people who built it, i.e. Developers and Operators interact at every stage of the application life cycle.
Advantages of DevOps
By standardizing and automating development and implementation processes, DevOps provides the following benefits in software release management:
- events, documented management processes and detailed reports are easy to track;
- Developers have more control over the environment, giving the infrastructure a more applied understanding of the product and its operation;
- significant reduction in time to market due to a “seamless” development and implementation cycle;
- improving customer satisfaction;
- improving the quality and reliability of products;
- increased productivity and efficiency;
- quick response and high speed of experiments;
- expanding the competencies and responsibilities of developers – programmers participate in setting up servers and finding errors, writing automated tests, smoothing out possible infrastructure vulnerabilities in the code. This reduces the number of errors during application deployment by about 5 times.