TITLE: A New Rule of Three AUTHOR: Eugene Wallingford DATE: August 29, 2004 4:29 PM DESC: find three negative consequences, not three known uses ----- BODY: Back in the beginning, the patterns community created the Rule of Three. This rule stated that every pattern should have three known uses. It was a part of the community's conscious effort to promote the creation of literature on well-tested solutions that had grown up in the practicing software world. Without the rule, leaders of the community worried that academics and students might re-write their latest theories into pattern form and drown out the new literature before it took root. These folks were not anti-academic; indeed many were and are academics. But they knew that academics had many outlets for their work, and they recognized the need to nurture a new community of writers among practicing software developers. The Rule of Three was a cultural rule, though, and not a natural law. Christopher Alexander, in The Timeless Way of Building, wrote that patterns could be drived from both practice and theory. As the patterns community matured, the rule became less useful as a normative mechanism. In recent years, Richard Gabriel has encouraged pattern writers to look beyond the need for three known uses when creating new pattern languages. The most important thing is the role of each pattern in the language to create a meaningful whole. Good material is worth writing. I returned to Gerald Weinberg's The Secrets of Consulting this weekend and ran across a new Rule of Three. I propose that pattern writers consider adopting Weinberg's Rule of Three, which he gives in his chapter on "seeing what's not there":
If you can't think of three things that might go wrong with your plans, then there's something wrong with your thinking.
At writers workshops, it's not uncommon to read a pattern which, according to its author, has no negative consequences. Apply the pattern and -- poof! -- all is well with the world. The real world doesn't usually work this way. If I use a Decorator or Mutual Recursion, then I still have plenty to think about. A pattern resolves some forces, but not others; or perhaps it resolves the primary forces under consideration but creates new ones within the system. If you are writing a pattern, try to think of three negative consequences. You may not find three, but if you can't find any then either you are thinking far enough or your pattern isn't one; it's a law of the universe. Authors can likewise use this rule as a reminder to develop their forces more completely. If a pattern addresses few forces, then the reader will rightly wonder if the "problem" is really a problem at all. Or, if all the forces point in one direction, then the problem doesn't seem all that hard to solve. The solution is implicit in the problem. Weinberg offers this rule as a general check on the breadth and depth of one's thinking, and it's a good one. But I think it also offers pattern writers, new and experienced alike, a much needed reminder that patterns are rarely so overarching that we can't find weaknesses in their armor. And looking for these weaknesses will help authors understand their problems better and write more convincing and more useful pattern languages. "Okay, Eugene, I'm game. How exactly do I do that?" Advice about the results of thinking are not helpful when it's the actual thinking that's your problem. Weinberg offers some general advice, and I'll share that in an upcoming entry. I'll also offer some advice drawn from my own experience and from experienced writers who've been teaching us at patterns conferences. -----