1) Work everything out, and pin every feature down beforehand.
Is that even possible?I normally sort things out enough in my head (and on paper) before I start coding, and then take things from there. After thinking things through, I get enough confidence to start coding - I just get to a point where I think 'OK, it's time to make a start on this'. There'll always be sticking points as coding has to be pretty dynamic, so there's no point pretending that once you have everything down on paper, it'll be plain sailing from there.