In the learn previous DevOps tutorial we introduced DevOps, discussed its advantages and identified some of the professionals who are involved and how they are involved in DevOps. In this tutorial, we will build on the previous tutorial to discuss the key building blocks of DevOps.
The key objective of DevOps is enabling different teams to seamlessly and cohesively work without any physical or other barriers. To successfully use DevOps, you need to understand the building blocks. In this article will discuss in detail the different building blocks.
The first building block you need to understand is the use of measurement and metrics. In software engineering, a project’s measurement is a very critical aspect. You need to identify metrics that are of value to your project. The traditional approach to measurement emphasizes on three aspects which are; tracking development, knowing where the project is currently, and creating schedules. The agile approach is also focused on measurement but there is a big challenge in unifying the measurements of development and operations.
In the traditional approach, application of metrics is concerned with a summary of different aspects into a single number. This approach has the dangers of creating a perception of understanding just because something can be summarized using a single number. Other dangers of using numerical summaries are a false sense of control, and affecting team behavior because of team and individual comparisons drawn from the metrics. In the traditional approach, metrics such as test coverage are useful for grabbing team attention but they fail at providing useful benefits to the team.
The second building block is improving the flow of features. The agile approach focuses on often delivery of value to end users. The often software delivery is based on using feedback from end users, continuous testing and an iterative approach. In the agile approach, focus is more on creating value for the end users and less on specific metrics. Activities that do not provide end users with valuable functionality are considered wasteful. In the agile approach, metrics are relied upon to provide a snapshot of the software as opposed to continuous measurement.
Because DevOps is concerned with eliminating barriers that exist between development and operations teams a unit of work is referred to as change to track progress which encompasses different work units such as bugs, enhancements and change requests. By combining the different changes into one term cooperation between different terms is enhanced.
DevOps is focused on rapid delivery of software with minimal risk. When dealing with smaller units of work there are several terms that are important to understand. Cycle time is referred to as the amount of time required to fulfill an operation. For example, the time required to complete an order from the time it was placed to the time it was delivered is the cycle time. The time from when development begins up to the time when revenue is realized is the cycle time in software projects. Other terms that are used are takt time, throughput and lead time. When carrying out a software development project, it is important to document all the terms that will be used to ensure they are used consistently.
The third building block of DevOps is accelerated delivery. Frequent deployment has the advantages of simplifying and reducing risks involved in deployment. Problem identification and resolution is another advantage of frequent deployment. Practices that are used to mitigate the risk in frequent deployment include continuous integration and automatic testing. Automatic releasing is an approach that is used to automate releases or release candidates. The objective of using automatic release is to minimize the risk inherent in software release. The other advantages of automated release are efficiency gains and having a process that is reproducible. Despite the benefits automatic release offers, there are several dangers that you need to be aware of. The first drawback is that not everything is suitable for automation. Therefore, you need to be thoughtful in deciding what will be automated. Another drawback of automation is that it needs strong skills and experience to monitor and resolve problems. Another drawback is extremely reliable automation systems do not promote skill development of operators.
The fourth building block of DevOps is incremental and iterative release of features. Most systems in production are made up of individual components that are related. The highest risk happens when there is an attempt to upgrade all the components at a go. The better approach is to deploy each component separately.
The fifth building block of DevOps is monitoring. Monitoring gathers information on all the different components of the system and avails this information to team members. Monitoring is used to identify incidents that may negatively affect the performance of a system. Memory use and network availability are some of the areas monitoring focuses on. Best practice is to develop the monitoring system alongside the software instead of developing them as different solutions. Monitoring is not a one-time activity rather it should continue as long as the system is in production.
The last building block is separating the process of deployment from release. When release and deployment are separated the speed of software development is greatly improved. Approaches that are used to separate deployment from release include branch by abstraction, feature toggles, dark launching and blue-green deployment. In a blue-green approach, the new and old systems are deployed parallel to each other. A load balancer is then used to migrate to the new system or revert to the old system. In a feature toggle approach all the code is sent to production but the decision on features to avail is made dynamically.
In this tutorial, we briefly reviewed the material covered in the learn what is DevOps tutorial. We discussed the different building blocks of DevOps their strengths and weaknesses.