Dan Shipper, on being a terrible programmer:
The answer is: a good coder knows when something should be quick and dirty, and when something should be thorough and clean. You learn to ask: is this really necessary? And sometimes taking a extra few hours to plan out how you're going to build something is necessary. As time goes on that's certainly becoming true for me.