I tend to prefer to do the hard bits first at a large and tiny level of granularity. At a large scale, I want to pull the risk forward and the hard bits are likely to be those where the requirements are relatively static. At the scale of writing a single method, say, it's just a matter of fleshing out the skeleton after doing the real work. However, somewhere in the middle I like to think. Not directly, just let it stew. Often I will change my mind about how to approach the problem.