As a C++ programmer, I find that when I'm writing code for myself, I like it to be well designed, maintainable, and as simple as possible. Unfortunately as I continue to add features, the application gets bigger and new requirements or unforeseen design issues tend to lead to re-factoring. I have a hard time leaving messy code messy, and I don't tend to hack features in, so every once in a while I clean up. It's way more fun to add new visuals and features. But these rewrites need to be done, otherwise the source code becomes an unmaintainable bug prone mess.