Accelerate by Nicole Forsgren, Jez Humble, Gene Kim
The book is based on a research of:
- 23 000 survey responses
- over 2 000 organizations, including startups, large enterprises, it/software and regulated industries
- projects including greenfields and legacy code
- methodologies from waterfall to agile/lean
The research first shows that software delivery performance is one of the predictors of organization's financial performance, as measured by profitability, productivity and market share.
Based on these surveys the research then focuses on the question: which capabilities predict software delivery performance in organizations.
The book is very practical and to-the-point.
24 capabilities are presented:
Continuous delivery
1. Use version control for all production artifacts. Code, config, infrastructure, documentation, everything.
2. Automate your deployment process. Deployments should happen without (forced) manual intervention.
3. Implement continuous integration. CI runs a set of tests to quickly discover any regressions.
4. Use trunk-based development methods. If feature branches are used, their lifetime is short (< 24h). No code freeze phases. Feature flags are used to make in-progress features which are merged hidden from users.
5. Implement test automation. Effective test suites created by developers.
6. Support test data management. Having adequate data to run test suite, ability to acquire necessary data on demand, etc.
7. Shift left on security. Security by design & part of the process. Infosec part of development cycle, preapproved security libraries and packages, testing security-related features as part of automated testing suite.
8. Implement continuous delivery. Software is in deployable state throughout its lifecycle, and the team prioritizes keeping the software in a deployable state over working on new features. Aka: never break develop, and if it is broken, fix it first. System can be deployed to production or end users at any time, on demand, by anyone.
Architecture
9. Use a loosely coupled architecture. This improves team's ability to test and deploy parts of the system on demand & independently, without complex & time consuming dependency management. (note: This can be achieved either just as well microservices as with modular monoliths.)
10. Architect for empowered teams. Teams should be able to choose their tools, if it helps them become better at continuous delivery. Teams should also reflect the architecture - loosely coupled, without complex dependencies.
Product and process
11. Gather and implement customer feedback. Seek actively and regularly customer feedback and incorporate it into design of products.
12. Make the flow of work visible through the value stream. Teams should have understanding & visibility into the flow of work from business to customers, including into the status of work, projects and products.
13. Work in small batches. Work should be sliced into small pieces that can be completed in a week or less. Both on feature level (small features) and product level (small releases, MVP).
14. Foster and enable team experimentation. Ability of developers to try out new ideas and create/update specs during development without approval from outside the team. Should be combined with small batches/releases & making flow of work visible.
Lean management and monitoring
15. Lightweight change approval processes (pair programming or peer reviews) produces superior IT performance than using external change approval boards.
16. Monitor cross applications and infrastructure to inform business decisions. Use data from monitoring tools to make business decisions (not just paging people when systems crash).
17. Check system health proactively. Monitor system health, enable teams to pre-emptively detect and mitigate problems.
18. Improve processes and manage work with WIP limits. Use WIP to drive process improvements, increase throughput and make constraints visible in the system
19. Visualize work to monitor quality and communicate throughout the team. Visual displays & dashboards for crash rates, defect rates, build failures etc.
Cultural
20. Support a generative culture (Westrum culture). Hallmarks: good information flow, high cooperation and trust, bridging between teams, conscious inquiry.
21. Encourage and support learning. Is learning considered essential? Does organization invest in learning? Make sure people can learn (on company time).
22. Support and facilitate collaboration among teams. How well teams interact in development, operations and infosec?
23. Provide resources and tools that make work meaningful. Make sure people can do work which is challenging and meaningful, where they can exercise their skills and judgement. Also, provide tools to do so.
24. Support or embody transformational leadership. Main factors: vision, intellectual stimulation, inspirational communication, supportive leadership, personal recognition.
Author: Nicole Forsgren, Jez Humble, Gene Kim
Year: 2018
Get the book on Amazon