observation of the day

Came across this on an internal blog and liked the description.

Think of good design in a system as a line of credit: just as purchasing new equipment for the business without generating income creates a debt against the credit line, adding features to a system without improving its design is “borrowing” against the capabilities of the system. There can be good reason to do this; after all, credit is used to improve cash flow and solvency. The danger is in thinking of this temporary loan as a permanent increase in funds. The debt must eventually be repaid.

Failure to reduce the debt (improve the design) in favor of making new purchases (adding new features) eventually results in a large portion of effort going toward interest payments (patches and bug-fixes), and reduced buying power (ability to add new features). Eventually, this can lead to a situation where all the effort is going toward interest payments (struggling to keep the system alive), and only trivial features can be added without major rework.