A Taste of Raspberry Jam

I came across this claim in a recent exchange about software design: “XP says ‘just start coding’…”. I’ve heard this quite often over the decades, but since I hadn’t heard it in a long time, it stuck in my head more strongly than it otherwise would. It gave me something to write about, but I’m not trying to write one of those “you’re wrong” articles, I promise. It will look like that for a minute, but only because I need that in order to get my real point. Please stick with me.

First Things First

XP does not quite say this.

XP says, “Don’t try to nail down all the details of your design before starting to write code. Allow the design to evolve and remain open to changing your design decisions as you learn more about what the code you’re writing.”

XP does, however, say, “Effective evolutionary design practice demands a willingness to not commit to your up-front ideas about the design. You very likely need to spend some time completely ignoring your up-front design choices in order to unlearn the habit of trying to nail down so many design details up front.” I understand how that might look like “just start coding”.

If you’re not experienced with evolutionary design, then you’re one of those folks who probably has the habit of trying to nail down too many details of the design up front. You probably developed this habit as a perfectly reasonable response to regret about past software design decisions. As a novice in evolutionary design, you might reasonably internalize this advice as a simple rule: “start coding sooner than you normally would and let yourself discover details about the design as you write code”.

But that’s too many words, so you shorten it to “just start coding”. That fits better in your working memory. It’s maybe even right in your context, but it’s very very easy to become wrong when you try to tell someone else to “just start coding”. That’s where the real fun begins.

So… what’s happening here?

What’s Happening Here

We have here an example of what Jerry Weinberg called “The Law of Raspberry Jam”.

The wider you spread it, the thinner it gets.

When people encounter your message, they don’t remember it, but instead they remember some abstraction of it. They forget some details, such as context or nuance or tone. They throw those things away. They take away a message that often doesn’t reflect what you intended to convey. And the more people in your audience, the more likely they are to find new and inventive ways to take away a message that bears little resemblance to what you thought you wrote or said. That’s the wider/thinner part. I know: annoying.

Oh, and by the way:

  • You don’t get to control what message they take away.
  • Nothing you do can stop this from happening.
  • You are not to blame for not making yourself clear enough.
  • They are not to blame for not understanding you.

This is merely a fundamental limitation in human communication. Even when everyone acts in good faith and does things well, people take away some abstraction of your message that you can’t predict and you can’t control and that only ever matches your intentions by accident. Frankly, it’s a miracle that we ever understand each other.

You might be able to narrow the gap somewhat, but you can’t eliminate it. This is especially true if your message is non-trivial and doesn’t already confirm your audience’s biases. No matter how much you try to clarify your message, you can never narrow this gap to zero. Ever. There is no trick.

This is not a problem to solve; it’s merely a reality to accept. It’s not something to blame yourself for. It’s not something to blame others for. It simply happens and I encourage you to expect it to happen.