Sometimes a large task is daunting which can even make "just code it" without planning impossible, as you just don't know where to start. I remember years ago I used to get stuck for ages trying to work on something new, because I had been raised in position where my main job was to make enhancements - I had no experience of working with a blank canvas. It was paralysing, unable to commit to an approach because it might be a sub-optimal design choice.
But anyway, these days I tend to sit down with paper and iterate through the design.
If it's big, I'll just start sketching out how parts of it will work separately, and eventually these pieces join together. I try turning it into classes or modules and then I'll discover that there's redundancies in the design, or there's something there that just doesn't work. So I start again, write it down with a better approach... and find out more problems. I keep iterating, gaining a better understanding of the problem on every sweep. (Whiteboards can be good for getting you up and about, being physical while sorting out thorny issues.)
When I have a psuedocode/flowchart design that's fairly detailed which has no obvious problems - that's when I start coding. In a formal environment, the final design sketch is what I would turn into a specification and distribute to users/developers for review.
Often, with a complicated design, I will transform this design sketch into comments to guide me as I code, which is faster and more accurate than having to consult my notes every 2 seconds:
// open file
// read header line
// check header is right (watch for int problem)
// select right config object
// loop over lines, read each line into config object
And I convert each comment into code.
This is a lot more efficient than coding yourself into a cul-de-sac and having to write and rewrite simply because you didn't have a handle on the problem from the beginning. This doesn't mean the design won't change any more - you'll still find problems - but some major design bugs can be thrashed out before you hit the IDE.
There are many approaches to design, this is just what works for me. What's best can vary on the type of project and size of the team.