Who is George Polya?
George Polya is remembered as one of the most important mathematicians of the 20th. He was born in Budapest, Hungary, in 1887 and earned a degree in chemical engineering, and later pursued a career in mathematics, earning a doctorate from the University of Budapest in 1912.
Polya moved to the United States in 1940, where he taught at Stanford University until his retirement in 1953. He wrote several influential books on mathematical problem-solving and education, including "How to Solve It" which is where we get Polya's Heuristic for Effective Problem-Solving from.
Some tasks in problem solving derived from Polya's approach include:
- Defining the problem as a group, ensuring everyone has a clear understanding of what needs to be solved
- Identifying the stakeholders involved and their needs, including end-users and other members of the team
- Collecting and analysing data related to the problem, including user feedback and market research
- Understanding the problem as a whole.
- Reframing the unknown in such a way that you can get a handle on it (mostly!)
UNDERSTAND
|
PLAN Decide on a heuristic.
|
SOLVE
|
CHECK For required units and accuracy using;
|
Source: George Polya Adapated for ESPS, Mathematics Dept.
Before you can solve a problem, you need to understand what the problem is.
This involves carefully reading and re-reading the problem statement to ensure that you have a clear understanding of what is being asked, and identifying what is known and what is unknown.
Take the time to fully comprehend the issue you're facing, including any constraints or requirements that must be met.
Some of the questions you want to ask here and be able to answer include:
- What is the actual problem? What is the data? Are there conditions, or stipulations? What is known, and unknown?
- At first glance, can you solve some of it? All of it? None of it!
- Can the problem be broken down into parts? (Can they be understood on their own? Can the small parts be solved individually?)
- Can you draw the problem, rewrite/describe it?
- How would you explain it to a novice or 5-year-old – Does doing that make it clearer?
Some tasks that might help include:
- Defining the problem as a group, ensuring everyone has a clear understanding of what needs to be solved
- Identifying the stakeholders involved and their needs, including end-users and other members of the team
- Collecting and analysing data related to the problem, including user feedback and market research
- Understanding the problem as a whole.
- Reframing the unknown in such a way that you can get a handle on it (mostly!)
Problem statements
A good software design starts with a clear problem statement – a brief description of an issue you want to solve.
The best time to create a problem statement is before you start thinking of solutions. If you catch yourself or your team rushing to the solution stage when you’re first discussing a problem, hit the brakes. Go back and work on the problem statement to make sure everyone understands and agrees on what the real problem is. You want to make sure that you have identified a problem that needs to be solved.
Steps for developing problem statements
- Identify the problem: This may involve collecting feedback from users, analysing business requirements, or identifying areas where efficiency can be improved.
- Define the scope: Once the problem has been identified, it is important to define the scope of the project. This involves determining the boundaries of the project and what is included and excluded. This helps to ensure that the project remains focused and manageable.
- Conduct research: To understand the problem fully, research is necessary. This may involve studying similar projects, analysing data, or interviewing stakeholders to gain insights into the problem and potential solutions.
- Formulate a hypothesis: Based on the research conducted, it is important to formulate a hypothesis about the problem and potential solutions. This helps to guide the development process and ensure that the project remains focused on addressing the problem.
- Develop requirements: Once the hypothesis has been formulated, it is important to develop requirements that will guide the development process. These requirements should be specific, measurable, achievable, relevant, and time-bound.
- Prioritize requirements: Once the requirements have been developed, it is important to prioritize them. This helps to ensure that the most critical requirements are addressed first and that the project remains on track.
- Communicate the problem and requirements: Finally, it is important to communicate the problem and requirements to all stakeholders. In your case, the stakeholder will include your project owner, users, and project sponsor (your online facilitator).
This helps to ensure that everyone is aligned on the problem and the project goals and that everyone is working towards the same objectives.
Components of a problem statement
Focusing on the 5 Ws: Who, What, When, Where, and Why or How, will help you to develop an effective problem statement. Keep in mind that not every statement will explicitly include each component.
However, asking these questions is a good way to make sure you’re covering the key elements:
Component | Description |
---|---|
Who | Who are the stakeholders that are affected by the problem? |
What | What is the current state, desired state, or unmet need? |
When | When is the issue occurring, or what is the timeframe involved? |
Where | Where is the problem occurring? For example, is it in a specific department, location, or region? |
Why | Why is this important or worth solving? How is the problem impacting your customers, employees, other stakeholders, or the organization? What is the magnitude of the problem? How large is the gap between the current and desired state? |
Consider reading the article “Effective problem statements have these 5 components” by Madeline Miles for more information on creating effective problem statements.
Example of a Good Problem Statement
"Company A’s invoicing system currently takes an average of five minutes to generate an invoice, which is causing delays in our accounting department and impacting our cash flow. We need to develop a software solution that reduces the time it takes to generate an invoice to less than two minutes while ensuring accuracy."
This problem statement is clear, specific, measurable, and has a defined goal.
It identifies the current problem, which is the slow invoicing system, and sets a goal for reducing the invoice generation time to less than two minutes while ensuring accuracy. This problem statement allows the development team to focus on developing a software solution that addresses the specific problem and meets the defined goal.
Component | Description |
---|---|
Who | The stakeholders affected by the problem are Company A's accounting department and cash flow. |
What | The current state is that the invoicing system takes an average of five minutes to generate an invoice, which is causing delays. The desired state is to reduce the time it takes to generate an invoice to less than two minutes while ensuring accuracy. |
When | The problem occurs whenever an invoice needs to be generated, so there is no specific timeframe mentioned. |
Where | The problem is occurring within Company A's invoicing system. |
Why | The problem is important because it is causing delays in the accounting department and impacting cash flow. The magnitude of the problem is significant enough that a software solution needs to be developed to address it. |
Example of a Bad Problem Statement
"Company A’s software is slow and needs to be improved."
This problem statement is vague and lacks specificity.
It doesn't provide any details about which software is slow or what specific improvements are needed. This problem statement also does not provide a clear goal or timeline, making it difficult for the development team to identify what needs to be done or how to measure success. This type of problem statement can lead to confusion and ineffective solutions, as it doesn't provide enough information to guide the development team's efforts.
Once you understand the problem, devise a plan or strategy for solving it, by breaking it down into smaller, more manageable parts. This will help you to identify the root cause of the issue and develop a plan of action.
Some of the questions you want to ask here and be able to answer include:
- Can we use an Analogy?
- What is the connection between what we know and don’t know?
- If we have no idea at all about solving the original problem, are there similar/related problems that we do know or can research that we can use? More general? More specific?
- Do other solutions (related or not) have the same problem domain? Can we use them? – Look at the unknown
It will be messy, and unorthodox at first, but things will get better and clearer as you gather more information. Brainstorm as many ideas as possible for solving the problem. Don't worry about whether they're good or bad at this stage – just get them down on paper.
Consider the following task:
- Implement the solution in a collaborative manner, ensuring that all team members are involved in the process and contributing their expertise
- Communicate regularly with other team members to ensure that everyone is on the same page and any issues are addressed in a timely manner
- Use version control systems and collaboration tools to facilitate the development process and ensure that everyone is working from the same codebase
Look back at what you have created. Once you have solved the problem, the final step is to evaluate your solution. This involves checking that your solution makes sense and is consistent with the problem statement. You should also consider whether there are alternative approaches to the problem or whether your solution could be generalized to solve other similar problems.
Ask the following questions:
- Do you think you have solved the problem?
- Solved part of the problem?
- Moved forward in your understanding in some way?
- So, with the benefit of hindsight – what could you have done better?
- More efficiently? What ideas were a waste of time (That couldn’t be seen at the time)
Revise the process. Version 2 will be much better! What have you learned that will make V2 more efficient, better, more accurate, etc.
Consider the following tasks:
- Test the solution thoroughly to ensure that it meets the needs of all stakeholders and works as intended
- Collect feedback from end-users and other stakeholders to identify areas for improvement
- Evaluate the development process itself to identify areas for improvement and make adjustments for future projects
Now, re-evaluate your ideas: Once you have a list of ideas, evaluate each one based on its feasibility, effectiveness, and impact. Identify any potential risks or downsides associated with each idea.
Prototype
Once you've selected the best idea, create a prototype or proof of concept to test it out. This will allow you to identify any potential flaws or issues early on, before you invest too much time or resources.
Iterate
Based on the feedback from your prototype, refine and iterate on your solution until you arrive at the optimal outcome.
Document your process
As you go through the creative problem-solving process, document your progress and any insights you gain along the way. This will help you to improve your problem-solving skills over time and to avoid making the same mistakes in the future.
By following these steps, you can develop your creative problem-solving skills and become a more effective and innovative software developer.
In your team, using the worksheet provided apply what we have learned about Polya’s Heuristic to define an effective problem statement and plan in relation to your project.
Share and discuss your findings in the forum.