Problems are everywhere and having a formalized framework with which to approach them is essential to success both in programming, software engineering, and life-at-large. Here we’ll discuss some problem-solving processes that can be applied to a wide range of problem domains.
Starting simply, a problem-solving process of four steps as described in the 1945 Book How to Solve It by G.Polya provides a solid foundation on which to start (1). These process stages are by no means deemed universal. They do serve well as the basis from which more specific and evolved problem-solving processes can be built. Understanding these core tenants of the problem-solving process is essential.
1. Understand the Problem
It should go without saying that to effectively solve a problem one must first understand that problem, at least in part. To help ensure an effective understanding of the problem considers the following:
Who are the stakeholders for this problem set?
What unknown variables exist for this problem?
Can the problem be broken down into smaller problems and, if so, would this offer an advantage in solving the larger problem?
Can this problem be represented graphically such that analysis can be performed for deeper insight?
Problems can be more fully understood and thus more completely addressed by working to answer these basic questions and address these basic concerns.
2. Plan the Solution
Just as with Software Engineering, without a plan of action few problems are solved. At the very least, the absence of a plan is likely to result in an inefficient result. Planning techniques vary wildly depending on the problem domain, solution domain, and available resources. Below are some general guidelines to help structure the planning stages:
Are there existing solutions to similar problems that could be used for reference or application?
Can the larger problem be broken into smaller problems in such a way that these sub-problems can be addressed individually? If so, can any sub-problems be compared to existing problems where full or partial solutions exist?
Can a design model be created for a potential solution, such that it can be analyzed, improved, and ultimately lead to an effective solution?
Learning from existing solutions and past problems is an invaluable tool for addressing new problems. Particularly in software development, even partial solutions may already exist such that considerable resources can be conserved in addressing new projects.
3. Carry Out the Plan
Design planning can help model potential problem solutions but eventually, they must be applied to realize their merit. Carrying out the plans and applying models developed during the planning stage often leads to the discovery of many previously-unknown variables. This process is often iterative and requires astute observation, consideration, and adjustment to reach goals. The following points are useful to consider:
Does the solution align with the plan/model? If not, where and why were deviations made and how did they affect the outcome of solving the problem?
Is each aspect of the solution provably correct in that rigorous proofs and/or tests can be applied?
Execution separates ideas from products and requires that one take action. When approaching a problem this means applying one’s plan and measuring outcomes. Was the solution successful? If not, was it partially successful? These questions can help identify what about your current process is providing positive results and where improvements can be made.
4. Examine the Results
Solutions, especially in software, aren’t always wholly successful. This hallmark characteristic of software products doesn’t necessitate scrapping a project, however. Even large-scale projects can be deemed successful while still possessing the potential for error. Things like bugs, unforeseen user behaviors, or overlooked requirements can all be addressed iteratively. Having a robust system to detect such bugs and errors is essential to having a flexible and dynamic problem-solving framework. Consider these two points when examining the results when problem-solving:
Can each aspect of the solution be tested and verified? If so, can the accuracy and effectiveness of these solutions be consistently measured?
Does the solution produce results that conform to the requirements of the results that are required? If so, can these results be validated by stakeholders?
Examination of results is a hallmark of scientific and engineering processes by which efforts can be quantified. Problem-solving processes are, by their very nature, scientific in nature. This characteristic can be illustrated by the systematic approaches outlined by common problem-solving frameworks. The measurement and validation/verification of solution results is arguably the most essential stage of any problem-solving process.
There are several extensions of the simple 4-step problem-solving process that are popular among software developers, business leaders, and manufacturing processes. In essence, the more granular processes sub-divide certain aspects of the 4-step for deeper clarification.
For example, in a common 8-step problem-solving process, step 1 is divided into identifying the problem and understanding the problem. While distinct in practice, both these steps are essentially about problem awareness.
Another common addition to the basic 4-step process is a final stage describing an iterative approach. This may be referred to as iteration, cycling, or just simple repetition. The idea here is to maintain a mindset, and course of action, of continuous improvement.
Another common separation of steps within problem-solving process frameworks is the selection of solutions. In the 4-step process, this would fit within the plan the solution stage. Selecting a solution would be done at the end of step two after initial solutions had been proposed. An extension of this step, while useful, is still essentially a modeling and design focused step.
Problem-solving is universal. Whether concerning a chicken trying to cross the road or NASA planning a manned mission to Mars. Having a framework with which to approach problems will produce more efficient and successful outcomes. The basic 4-step problem-solving process can be adapted for domain-specific use and even expanded upon for a more granular focus.
Polya, G. How to Solve It: A New Aspect of Mathematical Method (Princeton Science Library). Princeton University Press, 1945.