- Many Agile adoptions have treated technical practices as secondary compared to the management and team practice, but research shows that technical practices play a vital role
- Continuous delivery practices have a measurable impact on software delivery performance, organizational culture, and other outcome measures
- What is continuous delivery?
- A set of capabilities that enable us to get changes to production safely, quickly and sustainably
- Five key principles of continuous delivery:
- Build quality in
- We invest in building a culture supported by tools and people where we can detect issues quickly, so that they can be fixed straight away when they are cheap to detect and resolve
- Work in small batches
- By splitting work up into much smaller chunks that deliver measurable business outcomes quickly, we get essential feedback so that we can course correct
- Computers perform repetitive tasks; people solve problems
- Reduce cost of pushing out changes by taking repetitive work that takes a long time (regression testing, software deployments, etc.) and invest in simplifying and automating this work
- Thus we free up people for higher-value problem-solving work
- Relentlessly pursue continuous improvement
- High performing teams are never satisfied: they always strive to get better
- Make the state of system-level outcomes transparent
- System-level outcomes can only be achieved by close collaboration between everyone involved in the software delivery process
- In order to implement continuous delivery, we must create the following foundations:
- Comprehensive configuration management
- It should be possible to provision our environments, build, test, and deploy in a fully automated fashion purely from version control info
- Continuous integration
- Following principles of small batches and building quality in, high-performing teams keep branches short-lived (less than one day's work) and integrate them into trunk/master frequently
- Continuous testing
- Because testing is so essential, we should be doing it all the time as an integral part of the development process
- Automated unit and acceptance tests should be run against every commit
- Developers should be able to run all automated tests locally in order to triage and fix defects
- Testers should be performing exploratory testing continuously against the latest builds to come out of CI
- No one should be saying they are "done" with any work until all relevant automated tests have been written and are passing
- The impact of continuous delivery
- Strong impact on software delivery performance
- Helps to decrease deployment pain and team burnout
- Teams identify more strongly with the organization they work for
- Improves culture
- Lower change fail rates
- Drivers of continuous delivery
- Version control
- Deployment automation
- Continuous integration
- Trunk-based development
- Test automation
- Test data management
- Shift left on security
- Loosely coupled architecture
- Empowered teams
- Monitoring
- Proactive notification
- The impact of continuous delivery on quality
- Less time spent on rework or unplanned work
- Unplanned work: different between "paying attention to the low fuel warning light on an automobile versus running out of gas on the highway"
- Continuous delivery practices: What works and what doesn't
- Nine key capabilities that drive continuous delivery
- Version control
- What was most interesting was that keeping system and application configuration in version control was more highly correlated with software delivery performance than keeping application code in version control
- Configuration is normally considered a secondary concern to application code in configuration management, but our research shows that this is a misconception
- Test automation
- The following practices predict IT performance:
- Having automated tests that are reliable
- Developers primarily create and maintain acceptance tests, and they can easily reproduce and fix them on their development workstations
- None of this means getting rid of testers
- Testers perform exploratory, usability, and acceptance testing, and help to create and evolve suites of automated tests by working with developers
- Test data management
- Successful teams had adequate test data to run their fully automated test suites and could acquire test data for running automated tests on demand
- Test data was not a limit on the automated tests they could run
- Trunk-based development
- Developing off trunk/master rather than long-lived feature branches was correlated with higher delivery performance
- Teams that did well:
- Had fewer than three active branches at any time
- Their branches had very short lifetimes (less than a day)
- Never had "code freeze" or stabilization periods
- These results are independent of team size, organization size, or industry
- We hypothesize that having multiple long-lived branches discourages both refactoring and intrateam communication
- Note that open source projects whose contributors are not working on a project full time works differently
- Information security
- On high performing teams, the infosec personnel provided feedback at every step of the software delivery lifecycle, from design through demos to helping with test automation
- Adopting continuous delivery
- Continous delivery improves both delivery performance and quality, and also helps improve culture and reduce burnout and deployment pain
- (Here it lists six, and earlier it listed eleven; So what are the nine?)
Technology is always changing. It makes the industry interesting and exciting to work in, but it also makes it hard for you, as a developer, to keep up with the changes, let alone get ahead. And yet staying on top of these changes, and thriving because of them, is a rewarding and worthwhile goal, because by doing so, you unlock the potential of what you can accomplish. Here, I explore the how of doing just that.
Thursday, October 3, 2019
Accelerate Chapter 4 Discussion Points
Moving on to chapter 4 of Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations, we begin to cover technical practices: