In a random dataset, there are no internal relationships; with each element, our explanation must begin anew.| explaining.software
In 2006, Ron Jeffries wrote a series of posts describing his attempts to build a Sudoku solver. He began by wrapping a class around a simple datatype for the...| explaining.software
When we say fiction belongs to a genre, we mean that it builds upon familiar themes and structures. By assigning a genre — a slasher flick, or a comedy of...| explaining.software
The idea of structure, as used in this newsletter, is nothing new. It was first introduced by Ferdinand de Saussure in 1916, in his enormously influential...| explaining.software
When you're responsible for a junior developer, there's an early, crucial milestone: they know when to ask for help. Before this milestone, every task must...| explaining.software
Once upon a time, every project began with the creation of a canonical design document. This was called the system architecture, because it "rightly...| explaining.software
Previously, we explored how abstract explanations, paired with intent, become specific. And in our case, the intent is almost always to improve our software....| explaining.software
There was, in the mid 2010s, a popular formula for explaining a new startup: "Uber, but for ____." This was a metaphor: the startup, despite targeting a...| explaining.software
In the fractal-metaphor, our software is an open space. Each reader traverses that space, noting new details as they come into view. When our software is...| explaining.software
In his influential paper On the Criteria To Be Used in Decomposing Systems into Modules, David L. Parnas offers some simple, timeless advice: if two things change together, they belong together. This is not, in itself, an answer. It simply replaces a nebulous question — do these belong in the same module? — with something more concrete. In this newsletter, we are trying to do something similar. Previously, we established that every change is an explanation. When we say two things are coup...| Explaining Software Design
In the software design literature, cohesion is often referred to by a different name: single responsibility. As Sandi Metz explains it: When everything in a...| explaining.software
Sherry Turkle wrote her study of the culture of computing, The Second Self, "on an Apple II computer that had, quite literally, been torn bare."1 Its...| explaining.software
In their paper on Evolvability, Marc Kirschner and John Gerhart discuss the separation of concerns within our genetic code. They pay special attention to limbs: The limb is a complex structure with precisely placed bone, cartilage, muscle, nerves, and vascular elements, and one might think it is difficult for such a structure to change in evolution.1 Every vertebrate uses the same genes to encode their limbs. This mechanism can describe wings, flippers, arms, and everything in between. But ho...| Explaining Software Design
Previously, I provided a brief introduction to the ideas that will be covered in this newsletter. Software development can be reduced to a single, iterative...| explaining.software
Previously, we've looked at code generation in both Rails and Thrift. But unlike Thrift, the code generated by Rails is meant to be changed. Any change is...| explaining.software
Previously, we explored how coupling and cohesion are not separable concepts. When our software is cohesive, everything fits. Each part is shaped by its...| explaining.software
complexity The sum of every explanation. Weighted heavily towards future explanations. Measured in bits, but only relative to your audience's expectations....| explaining.software
As software designers, our goal is to reduce complexity. We want our software to be easier to understand, and easier to change. These are not distinct...| explaining.software
Previously, I provided a brief introduction to this newsletter, and then analyzed the structure of explanations in software development. For many in the...| explaining.software