How to solve an impossible problem
We need to remember that our capability is not fixed, but that we can learn as we solve a problem.
To solve a problem, we need to create a hook to begin working on it. This means finding a spot we can start iterating from, where we will receive a strong signal if this path is viable or not.
A critical part of having a signal is the system must work as a whole from the start, even if some pieces are faked.
We need to examine our presuppositions of how we are approaching a problem; to find new approaches that are easier to know if we’re on a viable path or a dead end.
By iteratively improving our implicit knowledge structure over time, we can eventually become capable of solving an impossible problem.
Simple
We need to notice what we spend our attention on, then measure if if affects outcomes. If the path forward does not feel viable, we need to discuss what the goal actually is, then ask if our assumptions have blinded us to a potentially viable path.
Keeping this simple is important since it lets us iterate faster, allowing us to measure a signal more often so we will know if we are going in the right direction or not.
Fun
If something is worth doing it creates a self-sustaining motivational loop, since we are internally motivated to continue doing it. It is easy to forget in systems we create that individual humans will use the system, so how they feel towards the system will affect the behavior of the system. We tend to want to repeat what was worth doing, and avoid what was a waste of time.
Do something that is worth doing. Make something that is worth using.
In practice
This is how we approaching a game engine to Android. We initially tried to port the rendering as one large blob. This was almost impossible, as it was extremely difficult to tell what was broken, and where bugs were coming from.
However, we took a step back and tried a new approach. We starting with rendering a simple triangle on device, the simplest version of what we needed to do. This created a path by which we could move towards success. We then added bits on to this, piece by piece, but at every stage having a working version.
Many of the pieces were ‘faked’ to start. This allows the necessary construction of the macro structure, as well as it’s iteration.