The motto of my work on software design is, “Software design is an exercise in human relationships.” I didn’t know what this meant when I wrote it, but as Tidy First? takes shape I’m beginning to understand.
Yesterday, Mark Zuckerberg rolled out a new motto for Facebook: “Meta, Metamates, Me”. Aside from being cringy & culty & exploitable, this is exactly backward of how I’m approaching writing about software design. (There’s lots more to say about the history of self-abnegation propaganda in tech, but I digress…)
Book writing is an exercise in scope slashing. I always start writing about a topic that is too small to fill a whole book, realize it’s way too big for a book, slash it back to a topic that is too small to fill a while book, then… The most times I’ve been through this loop is 4 before I got a book-sized topic.
https://www.reactiongifs.us/let-me-explain-the-princess-bride/
Software design is good example. I wanted to write about coupling & cohesion, Newton’s Laws of Motion for software development. That proved too large a topic, so I slashed scope to incremental design. Again, too large, so I slashed scope to this moment that occurs 10 times in every developers day: I have to change this code, it’s messy, do I Tidy First?
What does this have to do with human relationships? As it turns out, I can see 3 circles of relationships affected by software design:
Self. How do I treat myself as a programmer? At times I’ve had an abusive relationship with myself. This code sucks? Well I’m just going to have to power through it. It’s like walking with too-tight shoes. Tidying is geek self-care. Do I value myself enough to make my work easier?
Team. How do we treat each other as programmers? Software design choices affect other people. If I change an API you use, I’ve just caused you pain. Maybe it’s worth it in the long run & maybe not, but if I want to be effective as a designer I’d better be prepared to acknowledge & address the relationship effects of my “technical” decisions.
Product. How do programmers treat non-programmers? The classic recurring relationship is between Product & Engineering (& also Design & Data). Software design decisions affect these often-fraught relationships. How can we establish boundaries & then care for each other through (& in spite of) software design decisions?
So this work is looking like a trilogy. Tidy First? is about our relationship with ourselves. The next book will be about teams of people sharing a technical design space & ethically & thoughtfully nurturing their relationships. The last book will be, given reasonably healthy relationships among a team of reasonably healthy geeks, how can they extend care to a larger, not-so-obviously aligned, definitely not so geeky community.
It reminds me of a quote I totally align with :
“Clean code always looks like it was written by someone who cares.” — Michael Feathers.
I read it in a context where the subject to care off was the code itself or the craft of writing the code.
So to me, your perspective is way more empowering because you make your reader explicitely accountable to another human being, not an abstract representation of a process or a set of guidelines.
Can't wait for the entire trilogy :)