Book Club: PoSD

Book Club: PoSD

Updated: October 2021

There are a lot of engineering books. They often have lots and lots of words but only one or two good chapters or ideas. Which isn’t that much fun to read. So eventually people stop reading engineering books. Happily there are exceptions!

The Philosophy of Software Design by John Osterhaut bucks that trend, and is packed with a lot of meaning in very few pages. This makes it a great book club book. The topics involved can help a lot with alignment around the philosophical mindset behind coding. It’s helped me with long running teams where they’d drifted in purpose, and on brand new teams where we were all getting to know each other. If you’re looking for an overview, this youtube talk is a great summary

Its main content isn’t the full hour, and it works well on double speed.

The Book Club

In terms of guiding an engineering org, this book helps teams develop a shared understanding around the cost of complexity. In multi-team organizations every team has always asked “can we get the other teams to read this too?“.

The book covers 16 core concepts, each worth it’s own discussion.

16 Core Concepts

  1. Complexity is incremental: you have to sweat the small stuff
  2. Working code isn’t enough
  3. Make continual small investments to improve system design
  4. Modules should be deep
  5. Interfaces should be designed to make the most common usage as simple as possible
  6. It’s more important for a module to have a simple interface than a simple implementation
  7. General-purpose modules are deeper
  8. Separate general-purpose and special-purpose code
  9. Different layers should have different abstractions
  10. Pull complexity downward
  11. Define errors out of existence
  12. Design it twice
  13. Comments should describe things that are not obvious from the code
  14. Software should be designed for ease of reading, not ease of writing
  15. The increments of software development should be abstractions, not features
  16. Separate what matters from what doesn’t matter and emphasize the things that matter

and they break up into nice 20-ish page sections for weekly discussions. In total this low-effort high-reward book club can be done in 5 weeks, about 30-45 minutes of reading each week, with a 1 hour structured discussion.

Book Club Goals:

In the back of the book, there’s a “Summary of Design Principles” The goal is to break up the sessions to contain a few of those for discussion. When meeting to discuss walk through each chapter and relate it to current work, projects, or ongoing PRs. All the tradeoffs we make, even in little things, are relevant for discussion.

Tactically

Week 1: Chapters 1-4

Principles Covered:

Some prompts:

Week 2: Chapters 5-9

Principles Covered:

Some prompts:

Week 3 Chapters 10-13

Principles Covered:

Some prompts:

Week 4: Chapters 14-16

Principles Covered:

Some prompts:

Week 5: Chapters 17-22

Principles Covered:

Some prompts:

What’s next?

The rest is up to you.

Take a couple of the ideas that resonated most with the group and change a bit of process to encourage their use. Start to refer to these principles into code review. Use them to design the scope and shape of your pull requests. Let them do the work of representing a complex idea as it relates to complex code. Keep the ideas alive, and they’ll eventually flourish.