Book Description
How do you manage a living codebase that evolves and responds to changing requirements and demands over the length of its life? Based on their experience at Google, software engineers Titus Winters and Hyrum K. Wright, along with technical writer Tom Manshreck, present a candid and insightful look at how some of the world’s leading practitioners construct and maintain software.
At Google, software engineering represents roughly 80-90% of the work, while only 10-20% of the time involves original programming. Most teaching on this subject concentrates on programming, but little on software engineering. By emphasizing three fundamental principles that software organizations should keep in mind when designing, architecting, and writing code, this book explains:
- Fundamental differences between software engineering and programming
- The software engineering lifecycle from code development to testing to deprecation
- How to effectively manage your codebase and efficiently respond to change
- Why culture is important, and how processes, practices, and tools come into play
- Tradeoffs: how an organization makes optimal software decisions by keeping time and scale in mind
Table of Contents
- Foreword
- Preface
- I. Thesis
- 1. What Is Software Engineering?
- II. Culture
- 2. How to Work Well on Teams
-
3. Knowledge Sharing
- Challenges to Learning
- Philosophy
- Setting the Stage: Psychological Safety
- Growing Your Knowledge
- Scaling Your Questions: Ask the Community
- Scaling Your Knowledge: You Always Have Something to Teach
- Scaling Your Organization’s Knowledge
- Readability: Standardized Mentorship Through Code Review
- Conclusion
- TL;DRs
- 4. Engineering for Equity
- 5. How to Lead a Team
-
6. Leading at Scale
- Always Be Deciding
- Identify the Blinders
- Identify the Key Trade-Offs
- Decide, Then Iterate
- Case Study: Addressing the “Latency” of Web Search
- Always Be Leaving
- Your Mission: Build a “Self-Driving” Team
- Always Be Scaling
- The Cycle of Success
- Important versus Urgent
- Learn to Drop Balls
- Protecting Your Energy
- Conclusion
- TL;DRs
- 7. Measuring Engineering Productivity
- III. Processes
- 8. Style Guides and Rules
- 9. Code Review
- 10. Documentation
- 11. Testing Overview
- 12. Unit Testing
- 13. Test Doubles
- 14. Larger Testing
- 15. Deprecation
- IV. Tools
- 16. Version Control and Branch Management
- 17. Code Search
- 18. Build Systems and Build Philosophy
- 19. Critique: Google’s Code Review Tool
- 20. Static Analysis
- 21. Dependency Management
- 22. Large-Scale Changes
- 23. Continuous Integration
-
24. Continuous Delivery
- Idioms of Continuous Delivery at Google
- Velocity Is a Team Sport: How to Break Up a Deployment into Manageable Pieces
- Evaluating Changes in Isolation: Flag-Guarding Features
- Striving for Agility: Setting Up a Release Train
- Quality and User-Focus: Ship Only What Gets Used
- Shifting Left: Making Data-Driven Decisions Earlier
- Changing Team Culture: Building Discipline into Deployment
- Conclusion
- TL;DRs
- 25. Compute as a Service
- V. Conclusion
- 26. Conclusion
Product Information
- Title: Software Engineering at Google
- Author(s):
- Release date: February 2020
- Publisher(s): O'Reilly Media, Inc.
- ISBN: 9781492082781