<quote>Start with the documentation. My experience tells me that coding gets much easier after you've documented every single one of your functions. </quote>
After 50 years of programming, I could not agree more. Explain, both to yourself and others, what you are trying to achieve and the coding will be so much easier.
The documentation also controls the writing of tests. You have to test what the code is *intended* to do, not what it actually does. Writing tests from the code only checks that the code does what it does, not what it was intended to do.