Tidy first? (book review)
Tidy First? sets a new standard for software design books. The author, Kent Beck, proves that it’s possible to write about software design in a concise and practical style. Reading it was a pure joy, and I’m looking forward to the next parts.
Below are a few highlights from my reading. For a more comprehensive review and three full chapters from the book, check out this article by Gergely Orosz.
Human-centred
Throughout the book, Kent offers several definitions of software design, with the following being reiterated a few times:
Software design is an exercise in human relationships.
The first book in the series focuses on the programmer’s relationship with themself. We all can afford 30 min for tidying up between the tasks to make our own coding experience more pleasant.
Start with yourself.
Leave the code a little better than you found it.
The book presents 15 types of tidyings and explains how these can be integrated into a programmer’s day-to-day without much hassle.
The next books in the series promise an even stronger emphasis on human relationships as Kent plans to zoom out to team-level and organization-level software design activities.
“All problems are interpersonal relationship problems” from “The Courage to Be Disliked” applies to software too.
A Philosophy of Software Design
It has become a tradition to mention John Ousterhout’s book in every software design article on this blog. Below is an excerpt I found in the annotated reading list at the end of “Tidy First?”:
Ousterhout, John, A Philosophy of Software Design, Palo Alto: Yakmyam Press, 2018
This is the book that got me off my butt writing. John’s points are well taken about making design better, but they are presented dogmatically — always keep your code as clean as you possibly can. The question mark in Tidy first? is a direct response.
In a way, “A Philosophy of Software Design” is more beginner-friendly precisely because of its dogmatic approach.
“Tidy First?” reminds me of a teacher’s textbook. It provides a basic foundation for an imaginary software design class, leaving it up to the “teacher” to expand on the book’s ideas. In practice, senior and staff engineers often play roles of teachers and mentors. For them, “Tidy First?” could serve as an excellent inspiration.
Economics of options
In the final part of the book, Kent Beck draws an interesting analogy between the economics of options and the ever-changing nature of software:
“What behavior can I implement next?” has value all on its own, even before I implement it. This surprised me. I thought I was getting paid for what I had done. I wasn’t. I was mostly getting paid for what I could do next.
As Kent explains, software design has to reconcile the economic imperatives of “earn sooner/spend later” and “create options, not things”. On one hand, we want to sell more now, on the other hand, we want to prepare for future change, i.e. create more options.
As money directly affects how we build software, clarifying the relationship between money and software design is a wise idea.
To summarise
Kent Beck, who is famous for inventing Extreme Programming and (re)inventing Test-Driven-Development, has authored a beautiful little book on the daily practice of software design.
The book didn’t waste a single minute of my time. Even the introductory sections were packed with useful ideas. For instance, the intro to the Theory part explained how the theory might be actually useful in practice.
Last but not least, it has a beautiful cover. Highly recommended!