A Pattern for Problem Solving
Stefan Kovalovsky (
Stefan.Kovalovsky@acm.org)Steineichengasse 24
A-1100 Vienna, Austria
Phone: +43 (1) 689 12 05 20
Fax.: +43 (1) 689 12 05 30
Abstract: In this paper, a pattern that provides a solution to the problem of getting "stuck" in a problem solving situation is described.
Software Engineering has concerned itself predominantly with the technical and process aspects of Software Development. It took quite some time before books like "Peopleware" by DeMarco & Lister [1] or Weinberg’s "The Psychology of Computer Programming" [2] showed that humans are an equally important factor in the development process. This has led to a closer examination of the psychological factors and the "people skills" involved, like communication, learning, teambuilding etc. Some of the problems and solutions in those areas have even been formulated as patterns (therefore I would like to call this group "peopleware patterns").
One of the aforementioned "people skills" is creativity. It is needed most in the software design phase and when searching for the source of program failures, i.e. in "debugging".
It can get very frustrating if creativity leaves you and you effectively become stuck when working on a problem.
Charles Weir and James Noble in their EuroPLOP 99 contribution paper "Process Patterns for Personal Practice" [3] have described the background and listed several patterns related to each other that adress this situation. For further information, the reader is referred to their paper.
I discovered "Process Patterns..." the day before readying my submission to EuroPLOP 2000. In fact, the "Solution" section of previous incarnations of "Aha!" looked very similar to the patterns in Weir&Noble’s paper. However, while incorporating feedback from a Writer’s workshop in which my pattern was reviewed, it occurred to me that those different solutions (or distinct patterns in "Process Patterns...") are really variations of just one more fundamental one, which I have formulated below.
Aha!
Alias:
"Sudden Insight"
Problem:
How can you overcome "Thinker’s Block"?
Context:
You try to find the cause why something isn’t working as expected or the solution to a design problem and you run out of ideas.
Forces:
Solution:
Look for an external stimulus. This stimulus can be of many forms. Several different types are listed in the "examples" section.
Resulting context:
You overcome your block, and have new ideas on how to proceed. At best, you see the complete solution (Heureka!).
Rationale:
If you stay in the same environment for too long, you tend to get "numb" and accustomed to a certain kind of routine. This causes your thinking to follow familiar paths and weakens your "creative muscle". External influences can help to "whack" you out of the beaten tracks.
Examples:
There are many different ways how to get such an external stimulus. One of the oldest examples seems to be the Zen "Koan", a kind of fable in which the disciple reaches sudden enlightenment by pondering a seemingly nonsensical statement of his master. The modern form of this seems to be the technique of "creative provocation" as described by Edward DeBono [4].
The "socratic method" can be traced back to this pattern. In it, the teacher helps the student to discover the subject matter himself by asking directed questions.
The german poet Friedrich Schiller kept some of rotten apples in the drawer of his writing desk and would sniff at when needing some fresh (?) inspiration.
Describe the problem to a real or imagined audience. Here it might be especially helpful if the audience is not familiar with the problem domain, because this forces you to describe the problem in much simpler terms.
Get your stimulus by a change of location, i.e. take a walk.
You can also use the "random input technique" in the form of drawing a card from a special deck with questions that try to help you stimulated your creativity (two such decks are Roger von Oech’s "Creative Whack Pack" and the "Oblique Strategies Cards" developed by Brian Eno and Peter Schmidt)
Date:
3.3.2000 (Version for submission to EuroPLOP 2000)
References:
[1] DeMarco, Tom & Lister, Timothy; "Peopleware: Productive Projects and Teams"; Dorset House
[2] Weinberg, Gerald; "The Psychology of Computer Programming"; Van Nostrand Reinhold
[3] Weir, Charles & James Noble; "Process Patterns for Personal Practice: How to succeed in development without really trying"; EuroPLOP99 Paper (http://www.argo.be/europlop/Papers/Final/Weir2.doc)
[4] DeBono, Edward; "PO: Beyond Yes and No"; Penguin