I consider it is almost impossible to give perfect names on the first shoot, so there are few option available, make it "on the fly" as soon as you see it might be good, but it cuts the 'building/make it work stuff' momentum, and i feel i dont get enough global view for take the good refactoring decisions,
Right now i try to take one full day of work each week only refactoring, good habit?
Maybe i will try do it everyday before continue work, refreshing yersterday code by refactoring seems good idea,
When and how do you refactor your code?