Forsgren et. al. have been gathering information on how different practices (or capabilities) correlate with team performance. After a multiyear study they identified 24 key capabilities that software teams and organisations should be looking to adopt in order to drive improvements in software delivery:
- Use version control for all production artifacts
- Automate your deployment processes
- Implement continuous integration (CI)
- Use trunk-based development processes
- Implement test-automation
- Support test data management
- Shift left on security (integrating security into the design and test phase of the software development process)
- Implement continuous delivery (CD).
- Use a loosely coupled architecture
- Architect [the application] for empowered teams.
Product and process
- Gather and implement customer feedback
- Make the work visible through value streams
- Work in small batches
- Forster and enable team experimentation.
Lean management and monitoring
- Have a lightweight change approval process
- Monitor across application and infrastructure to inform business decisions
- Check system health proactively
- Improve processes and manage work with work-in-progress (WIP) limits
- Visualize work to monitor quality and communicate throughout the team
- Support a generative culture (as outlined by Westrum)
- Encourage and support learning
- Support and facilitate collaboration among teams
- Provide resources and tools that make work meaningful
- Support or embody transformational leadership.
Source: Accelerate, appendix A, pages 201–207.
We think we meet 21/24. How does your software organisation do?