…solving a Rubik’s Cube:
When you attempt to solve a Rubik’s cube, doing one side is pretty easy. It can often appear that you are making good progress: it’s already 1/6th complete! As you try to solve another side, you realise that in order to complete the second side, you have messed up the side you have already completed. These unintended consequences are very common when you write code. If you manage to complete 2 sides you feel like you are making significant progress – 1/3rd of the puzzle is now solved, you might think.
As you progress to the next side you become aware of the increasing complexity – how making changes in one place has ‘knock on’ effects in another. With each side you attempt, the difficulty of completing it becomes harder until you realise that you need to take a different approach.