I think the problem with most programmers (and techies) is they aren't big picture and very detail oriented
Then, maybe, your using the wrong approach.
Try "Don't document your code, but code you documentation"..
This is as easy as creating all files you normally would, and just write down, in comments, the code you are planning to write. You catch several flies at once here: You design the entire code base, top-down, you bring structure to it, and you already documented it before you even started coding!
All you have to do now is work out your comments. You start by prototyping your (OO) classes and methods or (non-OO) functions. Once you validated your information flow (as in: all methods take all parameters they need, objects have all variables and methods they need in a non-redundant way, etc etc)- the remaining task is trivial: work out any method.
Then once you completed implementing the last method, you hit compile. And guess what: chances are your code _just works_ because you organized yourself and your activities in such a way that will avoid creating stupid mistakes and oversights, and 100% of your focus was with implementing well-defined functions or methods.
Top-down just works. Especially when your projected project is large. Resist the temptation of coding (but of course, you can consider your approaches while designing). Don't feel stupid for spending 2 or more days designing without coding - you will earn this time back tenfold. And while designing without implementing, you will get a good feel of which potential libraries you need, and where the easy and tough bits of coding are. But eventually, it all comes down to avoiding errors while having oversight of the entire program flow.