7. Faster Builds by Doing Less with Build Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê29
7.1. Local vs remote build cache
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê35
7.2. Build cache effectiveness
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê36
7.3. Sustaining cache benefits over time
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê36
7.4. Summary
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê37
8. Test Distribution: Faster Builds by Distributing the Work
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê38
8.1. Traditional test parallelism options and their limitations
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê38
8.2. Capabilities of a fine-grained and transparent test distribution solution
. . . . . . . . . . . . . . . . Ê40
8.3. Test Distribution complements build caching
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê41
8.4. Test Distribution case study - Eclipse Jetty project
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê41
8.5. Conclusion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê45
9. Performance Profiling and Analytics
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê46
9.1. Maximum Achievable Build Performance (MABP) vs Actual Build Performance (ABP)
. . . Ê46
9.2. Recognize the importance of inputs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê47
9.3. Data is the obvious solution
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê48
9.4. The collaboration between developers and the development-infrastructure teams
. . . . . . Ê49
9.5. Be proactive and less incident-driven
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê50
9.6. See the big picture with performance analytics
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê51
9.7. Performance profiling with Build Scan™
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê52
9.8. ABP vs MABP revisited
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê53
Part 3 - TROUBLESHOOTING FAILURES AND BUILD RELIABILITY
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê54
10. Failure Types and Origins
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê55
10.1. Common build failure root causes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê55
10.2. Classifying failure types and determining ownership
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê55
10.3. The role of DPE in addressing build failures
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê56
11. Efficient Failure Troubleshooting
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê57
11.1. Data contextualization is the key to easier and more efficient troubleshooting
. . . . . . . . . Ê57
11.2. Implementation example: Leveraging Build Scan™
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê59
11.3. A spotlight on toolchain failures
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê59
11.4. The role of historical test data
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê59
11.5. Comparing builds to facilitate debugging
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê60
11.6. Summary
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê60
12. The Importance of Toolchain Reliability
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê61
12.1. What is toolchain reliability?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê61
12.2. The connection between performance and reliability
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê62
12.3. The connection between reliability issues and morale
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê62
12.4. The importance of issue prevention
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê63
12.5. The difference between reproducible and reliable builds
. . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê63
13. Best Practices for Improving Build Reliability with Failure Analytics . . . . . . . . . . . . . . . . . . . . . . Ê65
13.1. Avoid complaint-driven development
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê65
13.2. Use data to systematically improve reliability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê65