Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite… The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise
I believe that User Experience design has a similar debt metaphor happening.
Everyone wants to have a great product. However, according to Predictably Irrational by Dan Ariely, people will defer things they need whenever possible. In other words, if you ask someone if they want a healthy meal or fatty one for next week, they will choose the healthier option. If you ask them today, they will choose the fatty one.
When you ask a manager if they should pay down technical debt one day, the answer is yes. If you ask them if you could pay it down NOW, the answer is no. Few managers wants to stop building features to rewrite code they already wrote. One manager I met said, “Why didn’t they just write it correctly the first time?”
The answer is simple: Managerial pressure for deadlines. This is a universal truth. All managers want to have their feature or product sooner than is possible to do without building up technical debt. People just cut corners to squeeze the project into a shorter time span.
The killer thing about technical debt is the interest payments. As a company keeps growing and keeps cutting corners, the technical debt compounds and creates a situation where most of your time is spent dealing with the low quality and less and less time is spent building new features.
The lesson is simple: There is never time to do it right, but doing it wrong will lead to failure; personally and professionally. This may be the number one cause of poor products. Find a way to do things right and not accumulate technical debt or you will find yourself under a mountain of interest that you will not be able to pay off.