Chrispine Chiedo

Book review: Software Engineering at Google

Ever wondered how Google builds (or shall we say, engineers) its products?

For over two decades, Google has been regarded as an elite software engineering company. From groundbreaking technologies like MapReduce, BigTable, TensorFlow, Borg (the predecessor to Kubernetes), Blaze, Spanner, Search, etc., it’s no secret that many software engineers (outside of Google) wonder what their engineering process looks like.

Summary: This book is intended for practitioners who want to deepen their understanding of software engineering and learn some of the best practices from Google.

swe-google-book

Software engineering is a relatively young field compared to traditional engineering disciplines like Civil and Mechanical engineering. There is also the question of whether the process of building software should be considered an engineering discipline in the first place. And what exactly is software engineering?

The book Software Engineering at Google looks at the discipline of software engineering from Google’s perspective. It’s intended for practitioners who want to deepen their understanding of software engineering and learn some of the best practices from Google’s own experience, accumulated over time.

This 500-page volume is divided into several parts.

Part I: Thesis

The first part presents the thesis upon which the rest of the book is based. The single chapter in this part begins by defining what software engineering is:

Definition: Software engineering is programming integrated over time.

The chapter emphasizes the point that while programming is certainly a significant part of software engineering (after all, programming is how you generate new software in the first place), it isn’t the only part. A distinction is made between programming tasks (the actual act of writing software) and software engineering tasks (development, modification, maintenance, etc.)

The chapter also highlights the three primary themes in software engineering:

Part II: Culture

This part emphasizes the collective nature of a software development enterprise, and that proper cultural principles are essential for an organization to grow and remain healthy.

This section is made up of six chapters:

The main theme for this part is that software engineering is a team sport, and that cultivating healthy social interaction constructs like humility, respect, trust, and knowledge sharing is crucial for team success. This section also highlights the need for building diverse teams - that your team should ideally represent the users of your product.

The chapter on measuring engineering productivity was among the most interesting to me. Google uses the Goals/Signals/Metrics (GSM) framework to guide metrics creation:

The chapter also identifies the five core components of productivity (QUANTS):

Part III: Processes

Most of what is covered in this part are standard software engineering processes that should be familiar to many software engineers.

This section is made up of eight chapters:

Out of the eight chapters in this part, four chapters are dedicated to testing (shows you how testing is taken seriously at Google). One of the interesting things about testing at Google is the criteria/dimensions for classification of test suites:

Part IV: Tools

This section is all about the tools that support the software engineering processes at Google (this is an area in which the company has invested heavily).

This part is made up of ten chapters:

Some of the tools mentioned in this section are:

Something to note from this section is that Google follows trunk-based development (no dev branches), and its entire codebase (with a few exceptions) is hosted in a single repository (a monorepo).

Conclusion (and missed opportunity)

Overall, Software Engineering at Google is a fantastic book. Curated by veteran Google software engineers, the book gives us an overview of some of the important aspects of software engineering as a discipline.

One thing that I think is missing from the book is a discussion about Engineering for Sustainability. Environmental sustainability is such an important consideration in modern engineering that at least one chapter should have been dedicated to the topic (just like Engineering for Equity). Such a topic would cover things like using energy-efficient algorithms and/or programming languages. Perhaps the authors will consider adding a chapter on sustainability in the next edition of the book?

Share on: