Three Bears *

Patterns for Experiential Learning

This pattern was written as Kent Beck's Three Bears2 Pattern [KB] and revised by Eugene Wallingford.

You want the students to experience One Concept -- Several Implementations.


Many problems challenge the learner to find a solution positioned along some continuum. Solving these problems effectively requires that the learner discover a point or a range along the continuum that satisfies the demands of the problem. But finding such a solution requires that the learner have experience with many problems, balancing the demands of each in a particular solution. Until they have sufficient experience, they are likely to be unsuccessful finding the right balance.

How often should a developer refactor a program? How strictly should a musician follow the rhythm of the piece? How often should a point guard shoot the basketball?

The process of learning to find such balances creates substantial barriers to the learner gaining experience. The learner will likely be unsuccessful on the first few attempts, unlike many other learning activities. Even if the learner stumbles into the right balance, chances are that the learner will not recognize that the balance has been struck, or why.


Therefore, ask the learner to create solutions that lie at both extremes, as well as at some balance point. The extreme answers will certainly be 'wrong' for the given problem, but they give the learner permission to explore the boundaries of the continuum.

First, define the continuum for the learner. The simplest approach is to explain the reductio ad absurdum at both extremes.

Second, conduct an experiment that gives the learner a chance to locate the balance for problems whose solutions lie in three different places: at one end of the continuum, somewhere in the middle, and at the other end of the continuum.

Third, conduct a review that gives the learner an opportunity to reflect on the experiment.

It is a good idea to combine Three Bears with Build and Maintain Confidence.

The reductio ad absurdum strategy usually gives the learner enough background to begin learning the continuum. You might also pose a set of questions that will be asked of the resulting balance. For example, in reviewing the frequency of refactoring, you could ask 'Was the team able to get into a good flow while programming?', 'Was there sufficient time for testing?', and 'Did the team deliver its product?'

Your experiment should ensure that the learner experiences all three options close enough in time to accurately compare them. Scope the topic to something that can be accomplished in less than an hour, if possible.

Reviewing the experiment is critical if the learner is to understand how well the solutions balance the problem's demands. A useful technique is to have the learner briefly present the three solutions to other learners, and then have the rest of the group guess which was which. This can help learners who have not yet learned the true boundaries of the continuum.

Some topics are more complex. You may find that reducing a problem to a single continuum oversimplifies the topic so much that the learner arrives at a simplistic understanding. In such cases, you will want to follow up this experience with others that address the problem's other facets.


Three Bears has been used to teach requirements engineering. The instructor asks the learners to write stories that will define the system: one too large in scope to be useful, one too small, and one just right.

Similarly, Three Bears can help learners to explore the ethical continuum that faces computing professionals. Groups of three are asked to write stories about obviously ethical applications of computing technology, obviously unethical applications, and applications that are still unsettled. Later, the groups share their stories with each other and try to place the stories on the continuum. Interesting discussions usually follow as the groups disagree with one another about the relative placement of their stories.

Many experienced learners routinely use Three Bears in their own learning all the time. For example, a Smalltalk programmer might learn the constraint based ValueModel framework by deliberately writing systems that use it too much. Some programmers learn object-oriented programming by writing some programs in which every variable is an instance of a different class and other programs that use too few classes and objects.

2Three Bears derives from a German fairy tale in which a little girl encounters a number of situations in which her three choices are 'too hot, too cold, just right', 'too hard, too soft, just right', and so on.