(2022-01-16) Geepaw Hill Software Design Triplet
GeePaw Hill tweetstorm on software design. I was recently asked to prepare some content around the topic of software design. There are a lot of ideas out there about "good" software design and "bad", and about rules or the lack thereof. It's a rich topic, a lifetime game.
On the cover of Hofstadter's famous Godel, Escher, Bach, there's a photo of an artifact he made, called a "trip-let". The trip-let, when lit from three different angles, produces shadows that spell out "G", "E", and "B". Let's talk about software design.
A program is like a trip-let. It is a single artifact casting three shadows, each different, and each important: behavioral, interpretive, and reactive. Software design is shaping that artifact to create various effects in one, some, or all of those shadows.
We can characterize a shadow by the question at its center, its notion of felicity, and the images and tools it relies on most heavily.
The behavioral shadow of a program asks the question: "Does the program do what we want?"
Felicity, in the behavioral shadow, is about the satisfaction of the users.
The intepretive shadow asks the question, "Do we understand the program?"
felicity in the interpretive shadow is about whether and how the human makers can grasp the meaning of the text that casts it.
The classic image of the interpretive shadow is a class diagram
One way to think of interpretation is to think of "sense-making".
The reactive shadow asks the question, "Can we change the program?" The ecology of software is rarely fixed or final, nowadays, but undergoes nearly constant change. Felicity in the reactive shadow is about how hard or easy it is for us to respond to those changes.
My own work on MMMSS, see the site for the ongoing series, comes from my realization that the ideas & techniques of the reactive shadow apply throughout development, not only after some initial release.
The shadows are not "dimensions", in the ordinary usage of that term, outside of advanced mathematics. They are not orthogonal, for one thing. And for another, each, itself, includes multiple elements, not a single measurable value.
Edited: | Tweet this! | Search Twitter for discussion