In the software business, time is precious.
Software engineering teams often borrow time from the future at a very steep interest rate. Two examples:
A team is hurrying toward a deadline. The team has painstakingly produced a detailed design document for the product. To save time on the current release, the team stops updating the document as changes are made. The plan is to bring it back up to date after the deadline.
A company has a product for Windows. The company needs to ship the same product for Mac OS X. One plan would be to rework the Windows codebase to make it platform-neutral. Instead, the team chooses an alternate plan. They branch the two codebases. This allows feature development and releases to continue at speed on the Windows branch, while the new branch works on OS X support. Both projects will reach near-term milestones sooner. The long-term plan is to merge the two codebases, a time-consuming task.
In each of these cases, the team gets extra time now, at the expense of time later. In each case, they must either spend the time later to clean up the mess; or lose a lot of work.
I suspect the interest rate on these loans is high (200%-ish), but then the expected ROI for time (as opposed to cash) can be very high as well.
How should these decisions be made?