Saturday, December 6, 2014

Problem-Solving Strategies

Here is a list of problem-solving strategies. Most of these strategies arose from reflection on how I develop software design specifications. This is an evolving document.

  1. Identify and attack tangentially related problems. This often sheds light on or even resolves the original problem, even if the process happens to reveal more problems.
  2. Create solutions gradually by iterative refinement. The best solutions are evolved. Solve select problems, leaving others unsolved. Gradually throw more solutions into the mix. Don't expect solutions to grow by accrual, as periodic complete transformations may be necessary. Each new iteration still benefits by being derived from preceding solutions.
  3. Find and depict specific examples of the problem. Articulate the problem separately for each example to find a common articulation or to learn the problem's component pieces.
  4. Find the right questions to ask -- about the nature of the problem and what is desired in the solution. Asking questions about the smallest things that you don't understand can open up whole new spaces.
  5. Have sessions of diving in intensely. Think, organize, and re-think, over and over, and don't quit until you find yourself having trouble focusing. The objective is to tour some of the space and not to leave until you get some sense of it on which to chew, even if it's a sense of its chaos. These sessions complement more scatter-brained sessions for breaking road-blocks.
  6. Draw pictures at every opportunity. The act of trying to find a picture that captures a problem or solution is often enlightening. Watch for what you know and what you don't know.
  7. Apply aspects of possible solutions in the real world and see what you learn. Create prototypes and test them out.
  8. Talk out loud to yourself at every opportunity. Hearing it spoken engages the brain as if it's listening to another person.
  9. Play with speaking fast and unfocused. Just start talking, out loud, and don't let yourself stop. See where you go. This can help bubble up ideas that are just below the conscious that you may have been having trouble grasping.
  10. Talk with other people who can help and spend time considering their input. Sometimes just trying to explain something to someone can bring clarity.
  11. Attempt to explain both problems and solutions in writing, with precision.  Areas where you have trouble being precise may be areas where you lack understanding, where decisions may need to be made and problems solved.
  12. Don't be afraid to walk away from problems for days, weeks, or even months. Give yourself permission to temporarily **quit** the problem, with knowledge that you'll later be returning to it. If a better problem statement or even a solution doesn't pop into your mind during the break, you're likely to have a fresh perspective and more enthusiasm at the end of the break.
  13. Fearlessly start documentation and product over and over again instead of trying to backfit new understanding and new language into old expression.
  14. Label aspects of both the problem and the solution with the most precise words possible with no compromises. Words affect what you think about and how you think about it.
  15. In your own notes, express ideas in the most succinct language available to you that requires minimal or no effort on your part to decipher.
  16. Study/scan related information, domains, or technologies for ideas.
  17. Look for apparently similar problems in unrelated domains and explore mapping their solutions back to your domain. Ask yourself, "What does this remind me of?" and be open about your responses.
  18. Experiment with looking for answers in random things you see, allowing yourself to think crazy things. Sometimes a new property of a potential solution becomes available.
  19. Write long lists of ideas. Sort them, analyze them, and then write new lists.
  20. Articulate your *feelings* for the solutions on the table. This helps with identifying personal biases that interfere with solving the problem but have nothing to do with the solution.
  21. Periodically restate the problem throughout the day, as you're doing other activities. Just restate the problem, allowing yourself to find new words each time, but not requiring that you do so. State the problem as you lie in bed falling asleep. Allow your mind to wander around the problem when you wake in the morning, before getting out of bed. Sometimes that's when the answer comes. Standing may dispell the thinking.
  22. Play, "What would so-and-so do?"  Pretend that you are another person and wildly allow yourself to spit out answers from their perspective.
  23. When you've had enough planning, brainstorming, and problem-solving, say "Screw it!" and just try something to see what you learn. Play, play, and play. Putz around some too.
  24. Listen to stimulating music, but only instrumentals or lyrics in languages you don't understand. Or take a walk through through the woods where you won't bump into people who might distract you.  Or dance around and around as you think. Walk about, don't just sit there.
  25. Eat lots and lots of chocolate. (Or perhaps coffee is your thing.)
  26. Know that all problems fall with the right leverage, sufficient pressure, and enough time.
  27. If you sense a slight discomfort with some aspect of the solution, try to precisely articulate that discomfort. Doing so may clarify your understanding of the problem or the solution, or it may identify a problem with the solution.
  28. Analyze the problem from every angle you can until you find yourself stuck. Then start solving the parts of the problem that you do understand. You're likely to improve your understanding of the difficult parts of the problem in the process.
  29. Solve the problem for a specific case, even if oversimplified and unrealistic, even if it leaves other known problems completely unaddressed. Then generalize the solution to handle another case. Keep generalizing until you've handled all the cases. It's helpful to first enumerate the cases that need to be handled.
  30. Try again. You haven't failed until you quit trying.

No comments:

Post a Comment