- Plan, plan, do
- Do, learn (repeat)

## Solving math problems iteratively

During homework one day when I was a kid, I discovered that I could more easily solve my math problems by just testing and seeing what would happen. Even if I had no idea what would happen, I simply started jotting down a solution – with no idea as to whether it would hold or not. What I discovered was that the problem of “just trying something” would yield a solution far quicker than thinking ahead. I proudly announced my discovery to my teacher. I don’t know if she really understood what I was talking about, but she applauded me nevertheless, encouraging me to keep doing what I did. This approach to problem solving has stuck with me ever since. Now, I’m at a point where I will explore the mechanisms behind this type of problem solving to understand when and where it can be applied. In order to do that, we have to look at the mechanisms that makes this work.## How iterative problem solving works

In the situations where iterative learning works, what happens is as follows: You have no clue what the solution is, but you do have some (far from correct) ideas or guesses or assumptions. So based on these ideas/guesses/assumptions, you test a quick and dirty solution. What you arrive at is probably very wrong, but you will have gained something immensely valuable: Learning. By testing your ideas, guesses and assumptions very quickly, you will see the actual results they yield. This is feedback, which gives you learning. This, during the process of trying and learning, the amount of additional learning you will have gained will probably be far more than what you would have concluded/learned if you tried to figure out the “correct” solution without getting your hands dirty to actually try immediately. Using those new learnings, you will have revised your guesses, assumptions and ideas, and you can try again. This time, from a higher level of understanding. By repeating this process, you will continuously increase your learning until you are at a point where your assumptions, guesses and ideas are correct enough to bring you to the solution.## A formalized iterative learning process

Actually, learning IS making an assumption (read: guess) based on what you do know, then testing those assumptions to see if they hold. So in your original “try and learn” approach, you might have tried to solve the problem by assuming (read: guessing) three things: Assumption 1, Assumption 2 and Assumption 3 (A1, A2 and A3). If the assumptions produce the correct answer, great! You have verified that all three assumptions are correct. If you get the wrong result, at least one of the above assumptions must be wrong. This, in itself, is valuable knowledge, because it presents you with two choices:- If you have other ideas (for example A4 and A5) which you think are likely to produce the correct answer, simply try to solve a problem again using these.
- If you don’t have any more ideas, or if you have too many possible ideas to test, then you might want to drill down to A1-A3 to draw additional learnings about why they failed.

## One response to “Iterative Problem Solving”

Based on a conversation with a friend, I’ll add the following points to the post:

You can see the solution to a problem as a tree structure where each node is a way down towards the solution (hopefully) – but you don’t know before testing which way down will produce the results you are hoping for.

The road you choose to take is based on your assumptions (A1, A2, …). You always have a list of active assumptions (probably just intuitively, not explicitly), and a list of falsified assumptions (which may well be forgotten, not held in memory). The falsified ones are falsified because you tried a road down from a node based on some assumptions you had made, and when the road failed to produce the results you expected you assumed that your assumption was wrong. You then either create sub-assumptions (A1.1, …) to learn why A1 didn’t work, or you simply tried another node based on new/revised assumptions.

The fastest way to find the goal is NOT to try to build the entire tree or all assumptions at once, but to simply build/refine both the tree and your assumptions as you go. Make a very quick “best guess” based on your current knowledge and intuition and start executing any node that fits reasonably well. As described in the blog post, this makes you learn quickly and find the correct assumptions (and thereby the correct road – or even the opposite way around) quickly.

The mistake people make is that they try to draw a complete tree stucture before even trying to execute a single node. What happens then is that either they never finish (hence never start executing and thus never reach the goal, because drawing the “perfect” tree is very time consuming or even impossible), or if they finish they have to revise the entire tree after the first attempt at execution since the first things they will learn will invalidate their entire tree since reality is almost always different than you imagined.

I also think that another very important factor for success (aside from testing early) is: have the courage to make definitive conclusions even based on limited proof. In other words, dare to strike nodes that don’t work quickly, and dare to draw up new nodes that you believe in early.

I made the mistake for a long time in my life that I was too careful about making definitive conclusions. Instead, held too many nodes open for too long, thinking things such as “perhaps what I did didn’t work because I didn’t do it well enough / need more training / missed a detail that will make it work / …”. Rather than simply “It didn’t work, it probably doesn’t work, I’m going to try something else”.

The result of such reasoning is that progress will halt. In reality, there are so many nodes, and so many of them leading to the goal even though they are completely different and even contradict each other, than there is no “perfect way” – there are just multitudes of “good enough” ways. If you are slow with “closing off” ways that didn’t work, you will also be slow to find a way that works. The fastest way to find a way that works is to test many ways quickly rather than to try to “prove with high significance” that a way doesn’t work before you move on.