GoForSmoke:
One of my favorite techniques is to write pseudocode as comments and work out the basic mechanics there then write the actual code in between the pseudocode comments. It's never perfect but it works.
Mine too - I find it a good way to provide a context for each section of code to give an overview of what it's doing, so that the overall structure can be picked up from a quick skim of the section comments. It's also important to explain why something is being done (or not done), as well as how (the 'how' is often obvious from the code).