24 Key Capabilities For Software Continuous Delivery

2022-09-21 15:25:54
Nicole Forsgren, Jez Humble, and Gene Kim
Translated 57
Summary : This article is excerpted from "Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations" by Dr. Nicole Forsgren, Jez Humble and Gene Kim.

Continuous Delivery Capability

1. Apply version control to all production artifacts

Version control is the management of all production artifacts within a version control system (such as GitHub or Subversion), including application code, application configuration, system configuration, and scripts used to automate the construction and configuration of the environment.

2. Automated deployment process

Deployment automation means that the deployment is fully automated and does not require manual intervention.

3. Implementing Continuous Integration

Continuous Integration (CI) is the first step in achieving continuous delivery. It is a development practice in which code is checked in regularly, with each check-in triggering a set of quick tests to find serious regression issues, which can be fixed immediately by the developer. The CI process creates regulated builds and packages, which are eventually deployed and released.

4. Use of the trunk-based development methodology

The trunk-based development model has achieved high performance in software development and delivery. It features less than three active branches in the code repository. Branches with a very short lifecycle (e.g., less than one day) before being merged into a trunk branch. Application teams rarely or never have a "code lock" period because of merge conflicts, code freezes, or stabilization phases where no one can sign in or perform pull requests.

5. Implementing test automation

Test automation runs software tests automatically (rather than manually) throughout the development process. An effective test suite is reliable, meaning that tests can detect real failures and can only be passed as releasable code. Developers should be responsible primarily for creating and maintaining automated test suites.

6. Support for test data management

Test data needs to be carefully maintained, and test data management has become an increasingly important part of automated testing. Effective practices include the ability to have enough data to run your test suite, the ability to get the necessary data on demand, the ability to condition test data in the pipeline, and data that does not limit the number of tests that can be run. However, we are warned that teams should minimize the amount of test data they need to run automated tests.

7. Left shift security

Integrating security into the design and testing phases of the software development process is key to improving IT performance. This includes security reviews of applications, information security teams during the design and demonstration of applications, using pre-approved security repositories and packages, and testing security features as part of an automated test suite.

8. Implementing Continuous Delivery (CD)

CD is a development practice in which software is in a deployable state throughout its lifecycle. The team prioritizes keeping the software in a deployable state rather than working on new features. All team members can get quick feedback on the quality and deployability of the system, and when they receive reports that the system is not deployable, they can fix it quickly. Finally, the system can be deployed to production or end users whenever required.

Architectural Capabilities

9. Use of loosely coupled architecture

This impacts the ability of teams to test and deploy their applications on-demand without coordinating with other services. A loosely coupled architecture allows your teams to work independently without relying on other teams for support and services, enabling them to work quickly and create value for your organization.

10. Authorized team architects

Our research shows that teams choosing which tools they want to use are better at continuous delivery, which can drive better software development and delivery performance. No one knows better than practitioners what they need to work effectively.

Product & Process Capability

11. Collection and implementation of customer feedback

Our research found that it is important for software delivery performance that organizations seek regular and proactive customer feedback and incorporate it into their product design.

12. Making workflows visible through value streams

The team should have a good understanding and visibility of the workflow from the business to the customer, including the status of products and features. Our research has found that this has a positive impact on IT performance.

13. Working in small batches

The team should divide the work into small parts that can be completed in a week or less. The key is to separate the work into small sections that allow rapid development rather than to develop complex features on branches and release them rarely. This idea can be applied at both the feature and product levels. (An MVP is a prototype of a product with enough functionality to allow people to understand the product and its business model effectively.) Working in small batches can shorten the delivery time and speed up the feedback loop.

14. Fostering and initiating team experiments

Team experimentation is the ability of developers to try new ideas and create and update specifications during development without the need for approval from external to the team, allowing them to innovate and create value quickly. This is particularly impactful when combined with work on small batches, which merges customer feedback and makes the workflow visible.

Lean Management And Monitoring Capabilities

15. Conduct a lightweight change approval process

Our research has shown that a lightweight change approval process based on peer review (for programming or internal team code review) produces superior IT performance compared to an external Change Approval Board (CAB).

16. Monitoring across applications and infrastructure to inform business decisions

Use data from application and infrastructure monitoring tools to take action and make business decisions. This enables the paging of others when problems arise.

17. Proactive checking of system operating conditions

Monitoring system operating conditions by using thresholds and rate of change warnings enables the team to identify and mitigate problems before they occur.

18. Improving processes and managing work-in-progress (WIP) restrictions

Work-in-process constraints are widely used to manage workflows in the Lean community. When used effectively, they can improve process efficiency, increase throughput and show constraints in the system.

19. Visualization of work to monitor quality and communicate across the team

It can monitor quality and visual displays of work-in-progress, such as dashboards or internal websites, contributing to software delivery performance.

Cultural Competence

20. Support for generative culture

The measure of organizational culture is based on a typology developed by sociologist Ron Westrum. He has studied complex systems critical to safety in the aviation and healthcare sectors. Our research found that this level of culture predicted IT performance, organizational performance, and a reduction in weariness. This measure is marked by good information flow, high levels of collaboration and trust, bridging among teams, and conscious questioning.

21. Encouraging and supporting learning

How important is learning considered to be in your culture for continuous improvement? Is learning regarded as a cost or an investment? This is a measure of the learning culture in your organization.

22. supporting and facilitating cooperation among teams

It reflects the interaction among traditionally isolated teams in development, operations, and information security.

23. Providing the resources and tools to make work meaningful

The special measure of satisfaction in this job is being involved in challenging and rewarding work and having the right to exercise your skills and judgment. It also relates to having access to the tools and resources needed for the good performance of your job.

24. Supporting or reflecting transformational leadership

Transformational leadership supports and amplifies the technical and process work critical in DevOps. It comprises five elements: vision, intellectual stimulation, inspirational communication, supportive leadership, and personal recognition.

Write a Comment
Comment will be posted after it is reviewed.