BACKGROUND IMAGE: iSTOCK/GETTY IMAGES
The first of Agile's 12 principles reads: "Our highest priority is to satisfy the customer through early and continuous delivery of valuable software." In Agile organizations, DevOps software teams are tasked with just that. They are continually improving deployment procedures through the use of a variety of techniques and practices. These techniques, aligned with Agile and lean principles, seek to eliminate waste and deliver high-quality software as quickly as possible to the customer. Let's take a look at six of the development practices that Disciplined Agile Delivery recommends for disciplined DevOps teams.
1. Canary tests
One of the primary reasons DevOps software teams work at frequent, quick delivery to customers is in order to get feedback that can then be used to inform future development. Canary tests are those that test the outcome of delivery of functionality to a subset of customers. By comparing the results between those who get the function and those who don't, the team has the ability to evaluate whether the functionality provides the desired outcomes.
For example, let's say a company wants to provide a function that will allow users a discount in order to incentivize them to purchase more; however, they're not certain whether users will buy additional nondiscounted items as hoped, providing an overall positive revenue. The functionality is deployed to a small subset of users and the canary test is passed if the results are positive. The team can decide to further expand the canary tests to a bigger population to increase the level of confidence that the functionality is acting as expected before deploying to all their customers.
2. Split tests
Split tests, also called A/B tests, are similar to canary tests in that they also provide quick feedback to the team by evaluating usage by actual customers. With split tests, multiple options are available in parallel for users. By gathering usage data, DevOps software teams are able to gain insights into customer preferences that may, in turn, drive sales or customer satisfaction. For example, if there are two different screens available on an application that each provide the same functionality, but in a different manner, and one workflow or screen design is clearly more popular, this may help feed decisions about future enhancements or screen designs going forward.
3. Automated regression testing
Arguably the most important and widely known development strategy, automated regression testing will not only provide the high-level of quality required before deploying to production, it will save much time and effort over extensive and laborious manual testing. Agile teams often promote practices such as Test Driven Development, in which programmatic unit tests are written even before the code is written. Using this practice of creating the tests first guarantees that DevOps software development teams will have automated unit tests with all of their code.
4. Continuous integration
Once regression tests are automated, a continuous integration system allows for automatic validation across code from multiple developers or teams, as a complete set of regression tests are run every time a developer checks in new code. If a test fails, the code which caused the failure does not get integrated into the code base, and the developer is notified of the failure. In this way, only code that will not introduce a defect will be included in the integrated environment. Other tests such as schema analysis may be run to validate the integrity of the build and will help to ensure that the integrated code is high quality.
5. Continuous deployment
The next logical step after continuous integration is the practice of continuous deployment. Continuous deployment extends the practice of continuous integration by automatically promoting the code to the next highest environment, with the potential to deploy all the way to production. Because the cost of defects is much higher once they're in a production environment, some DevOps software teams may want to employ additional manual tests, though mature teams do have deployment processes completely automated with no manual intervention.
6. Development intelligence
Development intelligence is the use of data warehouse and business intelligence data that help development teams assess their process and delivery effectiveness. Data can be combined and rolled up across an organization and displayed via an integrated dashboard that will inform teams of how they're doing and provide insights into areas they could improve. They might be able to uncover bottlenecks in processes or feed data up at a portfolio level, providing transparency through an organization.
There's a lot of confusion about exactly what DevOps means, but put simply, it's about optimizing the software deployment and delivery processes through the use of automation, tools and techniques. These six development strategies will help your DevOps software teams optimize flow and deliver to the customer faster and with higher quality.
An all-inclusive guide to continuous development
Agile, DevOps and iterative development -- put the pieces together
Making the grade? Rating Agile and DevOps effectiveness