Book Profile
Software Engineering at Google
Titus Winters, Tom Manshreck · 2020
Google engineers explain how to build sustainable software that lasts by focusing on the intersection of culture, processes, and tools required to manage code at scale and over time.
Get the book →What's the difference between programming and software engineering? This book, written by engineers at Google, argues it's the dimension of time and scale. Drawing on two decades of experience managing one of the world's largest and longest-lived codebases, the authors present Google's unique philosophy and practices for building sustainable software. It moves beyond just writing code to cover the entire ecosystem, divided into three key parts: a culture built on teamwork and psychological safety, scalable processes like code reviews and automated testing, and powerful, centralized tools like their monorepo and distributed build system. For any engineer, team lead, or manager grappling with the growing complexity of their software, this book offers a comprehensive blueprint for how to make code that is adaptable, maintainable, and resilient to the inevitable challenges of change and growth.
What it argues
This model illustrates the core thesis of 'Software Engineering at Google,' which posits that specific investments in engineering culture, scalable processes, and unified tooling lead to improved psychological and behavioral states among engineers (such as higher velocity and collaborative ownership). These states, in turn, are the primary drivers of long-term software sustainability and the ability of the engineering organization to scale effectively.
Key ideas it contributes
- Supportive Engineering Culture — The set of shared values and norms in an engineering organization that prioritizes collaboration, learning, and mutual respect. It is founded on the principles of Humility, Respect, and Trust, fostering psychological safety where engineers feel comfortable asking questions, admitting mistakes, and challenging the status quo.
- Scalable Development Processes — Standardized, automatable, and efficient workflows and policies that govern the software development lifecycle, designed to maintain quality and manage complexity as the codebase and number of engineers grow. These processes are designed to require sub-linear human effort to scale.
- Unified Tooling Infrastructure — A cohesive and centrally-managed suite of development tools that provides a consistent and efficient experience for all engineers in the organization. It abstracts away underlying complexity and enables automation at a massive scale.
- Codebase Maintainability — The ease with which software can be understood, modified, and evolved by engineers. A maintainable codebase is characterized by consistency in style and patterns, clarity of code, and simplicity of design, making it less brittle and more resilient to change.
- Developer Velocity — The speed and efficiency of the entire development process, from an engineer starting a change to that change being live in production. High velocity is characterized by short feedback loops, minimal wait times, and a high frequency of deployments.
- Collaborative Ownership — The collective belief and practice that all engineers share responsibility for the health, quality, and long-term success of the entire codebase. This contrasts with a siloed model where teams only care about their own specific components.
- Long-Term Software Sustainability — The defining characteristic of software engineering, representing the ability of a software system to be effectively and efficiently maintained and adapted to necessary changes over its entire projected lifespan.
- Engineering Organization Scalability — The ability of an engineering organization to increase its size (number of engineers) and the scope of its work without experiencing a corresponding decline in per-engineer productivity or an exponential increase in coordination overhead.