When debugging a hard problem, a reliable algorithm is to:
1. spend time creating a list of everything in the problem that you do not truly understand
2. enumerate the list- only move onto the next item once you entirely understand the current item
3. add more items to the list if you discover more things you don't understand
4. repeat until there are no more items to enumerate
By the end, the solution to the problem is normally obvious. If it isn't, it may require a [[creative leap]]. If that's the case, try [[sparking a creative leap]].