Taking a software design course in college (Go Ducks!), we used Ed Yourdon (RIP) & Larry Constantine’s book Structured Design as a text. (This was ~1981-ish.) I read bits & pieces. Vaguely remembered coupling. Totally got cohesion wrong. Noted that most software investment went into “maintenance”. That was about it.
When Martin Fowler wrote Refactoring in 1999, I contributed a chapter & kibitzed on most of it. I had my own take on refactoring, organized in a more regular & less digestible way. I noted that some day I wanted to write my own version my way. Events intervened & I wrote about other things.
In 2005, Steven Fraser put together a panel celebrating 30 years since the publication of Structured Design. Ed & Larry participated, as did Grady Booch, Brian Henderson-Sellars, Rebecca Wirfs-Brock, and Steve McConnell. I knew I was going to need some ammunition if I was going to sit up front with a crew of that caliber, so I read the book again. Just kidding. I read the book for the first time.
My mouth dropped. All the ideas about design I had been playing with in a loosey-goosey way were laid out with precision & detail. Well, precision, detail, & some seriously out-dated examples.
I had breakfast with Ed & Larry, enjoying their comfortable banter (they were MIT classmates). I expressed my appreciation that they had laid out Newton’s Laws of Motion for software all those years ago. They must have been a bit bemused by my enthusiasm. Here’s how they signed my long-ago textbook:
In my giddiness I vowed to re-write their book for a modern audience. The basic principles you have been reading about here were all set out in that book—cost management, contagious change, coupling, cohesion. The examples needed updating & (for my taste) the principles could go a level deeper.
My first presentation of the updated material came in 2009. I called the idea “Responsive Design”, drawing a contrast with the Scylla of Predictive Design and the Charybdis of No Design At All. I made several well-received presentations but the idea as a whole didn’t take off. (I must say my explanation of cohesion seemed to leave folks more confused than when they started.) Then “Responsive Design” came to mean something entirely different. Then I shelved the topic. Sometimes you’re just not ready.
A vow is a vow, though. When I joined Gusto as Fellow in 2019 I had an unexpected 2 week delay before starting. With nothing else scheduled, I decided to just write & see how much of the book I could finish. Every day I’d awake, walk the hills, sit down & write long-hand, eat & nap, type & edit that morning’s draft, & watch videos until I fell asleep. I got into a great rhythm, ending the fortnight with 10,000 words. As a bonus, the first words off my fingers were, “Software design is an exercise in human relationships,” which quickly became the motto of the entire enterprise.
I stalled at 10K. I tried to write. I tried to present. The wheels spun but the car didn’t move.
Part of the problem was time—my energy was going into helping Gusto grow. Part of the problem was my ancient enemy Scope. I was trying to address too much of design all at once. Re-reading what I’d written so far, I noticed that I was spending considerable time around the moment an individual programmer, faced with the need to change code, has to decide whether or not to Tidy First. I moved the 10K words to the bone pile & started over with a new outline.
By January of 2021 I had started studying incentive systems in greater earnest. I thought, “Physician, heal thyself!” What incentive system could I put in place to keep me writing? I’m not a slow writer. I’m a frequent non-writer. That’s what takes all the time, the time I’m not writing. I started this substack as a way of creating community, getting feedback, & generating energy.
I did indeed write, but in splotches—here, there, all over. The words reflected my thoughts but they weren’t going anywhere. I bumped along for another year.
And so I took the incentives plunge—paid subscribers. I didn’t want paid subscribers. I didn’t want to feel beholden to anyone. If someone was giving me $7 a month, I’d feel an obligation to produce. I’d feel terrible if someone cancelled.
Turns out social obligation is an excellent incentive. If I go more than a week without publishing, churn rises. And so I write. Last month I had enough of a draft that I signed with O’Reilly Media. And here we are.
Thanks for this little peek behind the curtain; I find your humility and openness about the writing process (and design, too) refreshing. Reminds me of something I recently read on some social media platform or another: [paraphrasing] "Low-skilled people gain (undue) confidence from their lack of understanding of their own poor decisions and executions. It's the truly gifted who remain humble, driven by their constant questioning of things, including their own skills."
Nice one on the incentives with paid subscribers, and (now) by signing with O'Reilly (and congrats!)
Incentives are an interesting one. I was on a similar path to where you might have been when you started your newsletter. In 2021, I was 2 years into writing a book that I wanted to finish, on software engineering careers/advice. I was past signing with a publisher, but also past breaking the agreement, as it did not feel like the right fit.
I was hesitating taking another several months to finish the book, versus starting a newsletter where I'd have to write weekly (though not necessarily topics on the book). I chose to give the newsletter a go. The contract with the readers (paid subsciptions!) helped with the accountability with the newsletter, but not with the book, which fell by the wayside.
It's smart, how you have been writing the book along, and reminds me of the approach taken by Hardcore Software by Steven Sinofsky (https://hardcoresoftware.learningbyshipping.com/)