GeePaw Hill is workin on an idea. I urged him to publish his thoughts because I knew it would help him to make things concrete. Also I wanted to comment here.

Here’s his thread. Please read it and consider.

Remember that the vague but well-intended idea that I have in this series of articles is that, although many “Agile” ideas have been spread too thin, according to Weinberg’s Law of Raspberry Jam, I believe that there are some “lumpy” ideas, that correspond to his Law of Strawberry Jam:

As long as it has lumps, you can never spread it too thin.

I am searching in this series for the “lumps” of Agile thinking, which I am calling “Strawberries”, because, face it, “lumps” is mostly not a good marketing term, even though Mounds is one of my favorite candy bars.

The idea here is to find ideas that are easy to take up, and hard to water down. Now, there is no good habit that is so easy to take up that people won’t avoid it, or drop it, so this may be a quixotic search, but it’s cold out so I have to stay home anyway. And maybe, by identifying these smaller notions, more people will find them easy enough, and tasty enough, to benefit.

I believe that Hill is zeroing in on some important Strawberries.

As such, I’m encouraging him to express his ideas, early and often, until they take on the best form we can manage. And I’m going to noodle around with his tune here, to see what we cn discover.

My Reading

Mind you, I’m just trying to play along with the tune that Hill is creating. If I hit some useful new notes here, I know he’ll pick up on them. And if I hit some wrong ones, that’s OK too, and I’m sure he’ll tell me about that as well.

Hill identifies three shadows:

  • behavioral
  • interpretive
  • reactive

He suspects that the names will change, as do I. We’re just feeling our way here. But these shadows are close to what we mean:

Does the program do what we intend it to do?
Do we understand how the program does what it does?
When we need to change the program, can we do so?

I’ve phrased these as YES/NO binary questions, but clearly each of them is really a slider from zero to one. In each case, zero is very bad, one is perfect. (Possibly the slider is from negative infinity to one. We’ll not worry about that.)

We prefer a program that works. We prefer a program we can understand. We prefer a program that we can change.

Hill’s thread elaborates on each of these. Maybe read it a few more times.

Are These Strawberries?

Well, no. They are too large to be strawberries. But what they are is three shadowy areas where certain kinds of strawberries are thick on the ground.

In the behavioral shadow, we’ll find useful strawberries that help us to be sure that our program does what we intend. Over in those shadows, we’ll find ideas like the following, each of which is still probably a clump, not just one strawberry:

  • Domain Expert on Team
  • Story Examples
  • Test-First

In the interpretive shadow, we’ll find strawberries and clumps like these:

  • Meaningful names
  • Single-purpose code chunks
  • Pictures and diagrams
  • Design patterns
  • Comments
  • Expressive code

In the reactive shadow, we’ll find clumps of strawberries as well, perhaps like these:

  • Refactoring
  • Design patterns
  • Meaningful names
  • Small methods and functions
  • Data abstractions

Is there overlap among these? Absolutely! Almost every bit of the real objects in the center of the picture affects each of the shadows. When we’re lucky, we’ll find that a single idea works to improve all three shadows. One such candidate might be “meaningful names”, which certainly help us understand and change the program, but also help us get it right to begin with. Don’t you just hate when you use the wrong variable, i1 when you meant i2?

Where Shall We Go With This?

For now, let’s keep it loose. GeePay and I would like to hear people’s reactions to these notions. Responding to his thread would be one good way to do it.

These are shadows, close to the sense of Plato’s Cave. When we are faced with a computer program, we can’t directly sense its correctness, intelligibility, or flexibility. We can test it, study it, try to change it, and its reaction to our shining those lights on it will cast a shadow that is “like” the program as seen from that angle.

We need to learn to identify shapes in those shadows, and learn to modify the program in ways that improve those shadows, in the sense that our confidence in the program, our grasping of it, our modification of it, improves.

As we learn to do that, we’ll begin to identify individual strawberries, ideas, techniques, that are more clear, more tasty, and, ideally, not subject to being watered down.

Your thoughts and comments will help with that. Look at the shadows, write an article, link it to us.

Strawberries are tasty and will help us do our work better, and to have more joy in doing it.

See you next time!