I've done some work for a personal project of mine, and now I understand why people tell us to plan out all our interfaces and design before coding. I've got some good classes and already have some working code, but all in all the the organization (architecture) is somewhat of a mess, and I'm already saying "If I did it again, I would do it like this...". The question is, should I sketch out a plan of how I want my code to look, and refactor the existing code to the new model, or if I should take what works great, and write all new code for the deficient parts (basically starting from scratch with a fair amount of copy and paste from this project).
I've got git history I'm not sure I want to lose, but the task of slowly rewriting everything seems daunting. So the question I'm asking is: when refactoring a young project, should one use evolution or revolution to get it right the second time?