Technical debt is a less-than-perfect design implemented to achieve some goal. It is a trade off between design and some other aspect of your project. Perhaps the other aspect is a delivery date. Perhaps it is performance.
Technical debt often occurs in four forms: tangled code, jumbled databases, old tools, and magic boxes.