I'm sure I'm not the only one in this situation and I wanted to see what you guys do about this on day-to-day basis. Sorry if this comes off a bit ranty.
As a company founder and the main tech guy, I work full-time on the early stages of several different products. I get to write a lot of different code all day every day, the vast majority probably completely throwaway for business reasons. A lot of this code doesn't come out quite right the first time. I feel that I have good taste in terms of both the microscopic aspects of development and the larger aspects of design, and thus I often feel terrible about these different early stage codebases I own. This is especially true when I have to go back to iterating on products for adding more features, more flows and supporting more scenarios.
I can always think of dozens of ways of refactoring things to make them more readable, simpler, less error prone, faster, more re-usable, more reliable and so on. I'm continuously tempted to just take a few hours here and there to polish things up, rewrite a few systems etc. At the same time I rationally realize that it's a waste of time from a business standpoint. In practice the business will get a much larger bang for its buck from me spending time hacking together "good enough" first iterations to test market hypotheses rather than endlessly striving to create the world's most elegant solutions to each single problem.
Programmers do need to be pretty obsessive, but at some point the business begins to suffer from your inability to work with something that's just "good enough". You put so much effort into creating something elegant and tasteful that it's almost painful to not shave the yak just a bit more. "Imagine how cool it would be if app boot times were reduced to a mere fraction of what they are now", or "the system could be significantly less error prone if only I spent a few days on.." etc.
I suspect that part of the conflict comes from the fact that early stage businesses simply don't have room for beautiful and elegant implementation when a quickly hacked together version is 100% good enough to prove the point you're testing. That is unless what you're working on gains its business advantage through a new and complex implemntation. Productization is a different ballgame from prototyping.
Thoughts? Hacks for how to overcome the axe sharpening impulse? Words of wisdom?