technical debt
technical debt
Technical Debt = When you coded without thinking AND your project is successful and growing. It's debt because now you have to go back and fix/change the code.
Technical Grant = When you coded without thinking BUT your project is NOT successful and fails. It's a grant because it saved you time.
Most projects / startups fail so for most people "Just Do It" works better. Plus the product you envision is almost never the product you end up with. So all that thinking you invested can be a waste of time.
Improving skills can take the form of learning a new tool (css -> sass), a new programming pattern (like currying and monoids in functional programming), and more along those lines.
Granted, a huge problem with technical debt comes when your playing with a team, and if X people are going to be using your code, but it takes Y time to explain how that code works, then if takes Z time to refactor that code, and only W time to explain after the refactoring. Then, if XY > Z + XW, refactor every time!
But I would bet that if you let the market dictate too much too soon, it will be harder to truly innovate, which is usually what the original vision was about. I'm obviously making some pretty big assumptions here but people know only what they know, and sometimes it takes carefully timed and constructed execution to snap them out of it to create a new paradigm and take things to the next level.
http://www.codinghorror.com/blog/2009/02/paying-down-your-te...
It's almost a Maserati problem when you think about it.
Had the technical debt been paid up front, the iteration rate might have been much faster (e.g., good encapsulation and abstraction allows you to switch out things quickly to test different mechanics in a game), leading to a better end product that people will pay for.