The Heuristic Wiki

Contract To Expand

A heuristic for exploring unknown spaces:

Pick a smaller problem than what you're really going after, and solve that tiny problem completely ("contract" = tie up all the threads). This will change your vantage point, opening up new, accessible steps toward the big problem.

Also known as "baby steps" or "take the low-hanging fruit".

Marketing, for example

A common, fundamental marketing mistake is to define your product or company or message as broadly as possible, in order not to "rule out any options". To take a silly example, a company that sells coffee mugs might call itself Containment Facilitation, Inc.

"After all, coffee mugs can contain a lot more than just coffee. We want people to come to us for all their liquid containment needs. And actually, our cups can hold more than just liquids. For example, you could hold polenta in one of our coffee cups. That's why we don't mention liquid in our company name. Say, why don't we stop calling them coffee mugs and start selling them as liquid/non-liquid containment vessels? Just think of the HUGE market we could reach!"

The problem with going after a larger market is that it's more difficult to be heard and understood. It's too much of a leap for the customers. Taking a large market is not a step accessible to you right now.

The book Crossing the Chasm gives, among many other examples of well-executed Contract To Expand, the way that Documentum took over a very large market. In the early days, they had a great product but weren't getting anywhere in the market despite attacking it on many fronts for a long time. They solved their problem by focusing on just people who needed to keep track of federal pharmaceuticals regulations. The fact that there were only 14 such people in the whole world was not a bad thing, it was a good thing. It enabled them to take 100% of the market. Their customers were extremely satisfied, because the company focused everything on satisfying them. Those customers, in turn, recommended the product to people they knew in closely related fields. And from there, it spread, a little bit at a time.

Why it works

The underlying descriptive principle behind Contract To Expand is that only some goals are accessible to you right now. Achieving some goal right now, like signing a few customers, will make more goals accessible to you later, though right now you can't know what they are. Pick something that you can do right now, and do it right now. It doesn't matter that it's not your ultimate goal and you can't quite see how the step right now will lead to the ultimate goal.

Focusing on just one thing will open up new possibilities. A single, decisive success drives a spike into the unknown space--deep enough to make connections with other goodies in that unknown space.

Focusing on a ton of things means you won't accomplish any of them. Focusing on several unrelated things means that achieving one of them won't plant much of a seed. The success won't spread, because you're spread too thin.

Whenever you find yourself pulled in too many directions at once, unable to make headway anywhere, Contract To Expand. Pick a more modest goal, one about which you can think clearly and that you can accomplish right now. Then you'll be in a whole new position.

Extreme Programming

Of course you've seen the same heuristic in Extreme Programming. You don't understand the problem space or the design space well enough to even plan the outlines of a solution? Do a spike. You've got lots of ideas for how to radically improve the design, but it's hard to keep it all in your head at once? Don't do them all at once, just pick one simple refactoring job and get it done. A few more refactorings will then become simple and easy. Once you do those, you may spot an opportunity to do some very simple refactoring that removes 3000 lines of code in ten minutes while still passing all tests.

The trick in Extreme Programming is to continually Contract To Expand. Apply full force to one very small, concrete job at a time, and gradually the "space" of good design will open up to you. Attack on many fronts at once (through intense forethought) and you only get confused. Take what is accessible now, and more moves will then become accessible--moves that you can't anticipate in detail yet.


Poetry, for example?

By fixing some scheme of rhyme or scansion the poet forces word choices and shades of meaning and interrelationship impossible in prose. Even limericks demonstrate this--there are many subjects, including the Harlot From Kew?, the Young Bugger From Sydney?, or the Expressive Man From Newcastle?, that can't be described any other way. Still more wonderful expansion of intertextual play is found in real poetry - Kubla Khan?, say ...

Actually, fixing a scheme of rhyme or scansion is Expand To Contract because it introduces an additional constraint: it makes the original problem more complicated without getting any smaller thing (like a tiny poem) completed. Contract To Expand means to simplify your problem by solving a smaller, neater problem first and then seeing what that opens up. Contract To Expand is remarkably similar to Hill Climbing.


See also Expand To Contract.

Version 4 2004-Jul-05 10:55 UTC

Last edit by Ben Kovitz