I’ll post a separate reflection on why getting Tidy Together? started has been so hard for me. I’ll also post an update on the whole 3-book series. This post is the provisional outline of what will be in book 2.
I don’t outline first. How very up-front! I gather topics. Put them on cards. Write about them separately. Eventually order begins to emerge.
It both helps & hurts that I’ve been working on this material since 2005. I have way more than will fit, even in all 3 books together. However, I also have a lot of practice presenting the material various ways. The only way to present well is to present badly many times. You get the benefits of all those failed presentations.
Books
The One Startling Sentence for the series is:
Software design is an exercise in human relationships
Superior technical skills & superior grasp of theory is only useful when placed in service of these relationships.
Each book has 3 parts:
Technique. Things you can actually do as you design. I put these first so people who want to start learning by doing can begin after reading a few pages. That’s not the same as mastering the material, but it can be a path there.
Management. We always have topics other than software design competing for our time & attention. Telling people what to do to design isn’t useful unless they prioritize design appropriately.
Theory. There are deep roots for why Empirical Software Design is effective. Understanding why on top of what & when gives practitioners the maximum number of options for creating value.
Outline
Tidy Together? is for teams designing software together. The changes they make will affect each other but shouldn’t impact customers. They still have incentive mismatches. They still have temptations to misalign authority & responsibility.
Technique
This section contains my restatement of refactorings. The key difference between my take & Fowler’s is that I consider all refactorings reversible. For every extract there is an inline. I want to master both to give me the greatest number of paths through the design space.
In this section I’ll also address object-oriented versus functional versus imperative designs. Summary—objects & functions are fundamentally the same but imperative programming is prone to excess coupling.
Extract/inline function/method
Extract/inline fields
Extract/inline method object
Extract/inline parameter cluster
Move function/method
Global to local state
Move code up/down the call tree (field assignment, conditionals, ???)
Management
The theme in this section is to start, sustain, suspend, & complete large changes in small, safe steps.
Aligning authority & responsibility
Separate interface & implementation hats
Interruptible changes
Collective ownership
Parallel structures—the key to non-disruptive change
Pass through implementation (the TF? take on this really needed an example)
Breaking changes—tradeoff space (summary—don’t ever break the system)
Timing—pull versus push
Money in process—a design metric
Similar→identical→de-duplicate
Effort/output/outcome/impact
Make it run, make it right, make it fast
Incentives—structure folks & behavior folks
Theory
Finally! I get to talk about power law distributions, the fundamental mind-blowing counter-intuitive law of nature underpinning software design (& a bunch of other stuff.
Taxonomy of couplings
Emergent design
Implicit design made explicit
Coupling & inheritance
Meaningless mean—averages mis-characterize power-law distributed data
Generating a power law distribution versus generating a normal distribution
Unreasonable cost of “outliers”
Symmetry
Shape of coupling/de-coupling tradeoff
Ethics of care in software design
Design attractors (maybe goes in book 3)
Process
Whew! So that’s it, the whole book. “All” I have to do now is write all those chapters & I’ll be done. I hope to complete 6000 words a week (~3 chapters) for 10 weeks. I’ll be sending draft chapters to paying subscribers as I’m ready for feedback, maybe a little slower than I complete them.
If you’d rather wait until you can read the whole book, that makes perfect sense. If you’d like to begin learning & applying these lessons sooner, then now is a good time to sign up if you haven’t already. Here is a 30% discount on a paying subscription, good for the next 2 weeks. (Once chapters begin appearing & feedback starts flying, I prefer to keep the feedback group relatively stable.)
I’m excited & a little intimidated to be embarking on this. It’s not like I’ll ever be more ready, though, so here we go.
The outline looks great! Very much looking forward to seeing the chapters as they come out.
Wow, I’m really looking forward to reading this. It was really exciting seeing the last book take form and this one looks to be just as interesting, if not more. 😊