In my experience, TDD has a bit of a similar effect on your perception on a problem.
By first designing the test that would make the code fail, then making sure it fails, then create the code to have the test pass, you kind of change the way you think about the original problem, and it sometimes helps.