none usually but I don't know all that much about coding so i make it up as i go along and revisit as needed
It really depends on the complexity of the project. I generally try to have at least a basic structure in my head before I start typing. For complex math or systems I'll start with pen and paper. In my experience good coding practices make more of a difference for a lone individual then good planning. Not sure if this holds true for bigger teams.
As BoredMormon said, it depends on the complexity of the project. But I usually use some visual UML-like tool (or pen&paper) to plan out how complex systems should work. I assign responsibilities, and key data to the classes etc. Usually it is much quicker than just coding and discovering that you arranged you classes poorly and cant achieve your goal without major re-factoring.