Technical debt is a metaphor that equates software development to monetary debt. In my opinion it is one of the most crucial concepts to be aware of when planning projects or road-maps.
Imagine that you have a project that has two potential options; one is quick and easy but will require modification in the future, the other has a better design but will take more time to implement.
In development, releasing code with a ‘quick-and-dirty’ approach is like incurring debt – it comes with the obligation of interest, which, for technical debt, comes in the form of extra work in the future.
Just like monetary debt, technical debt is interest-bearing and compounds. You always have the option to pay down the debt (long-term thinking) or to take out additional credit (short-term) but your project can become insolvent where the only option is to write-off the debt (re-write from scratch).
To summarise, it is a debt that you incur every time you avoid doing the right thing like removing duplication or redundancy. It will add an overhead to everything you do from thereon in, whether that is troubleshooting, maintenance, upgrading or making changes.
[Some parts taken from MartinFowler.com and Techopedia]