Technical debt is a term used in software development, or any other IT field, to describe the implied cost of future reworking required when choosing an easy but limited solution instead of a better approach that could take more time. It is the result of development teams taking actions to expedite the delivery of a piece of functionality or a product, often by taking shortcuts in writing code so that they achieve their goal faster, but at the cost of uglier, harder to maintain code. Technical debt is not necessarily a bad thing, and sometimes it is required to move projects forward, such as in a proof-of-concept. However, if technical debt is not repaid, it can accumulate "interest," making it harder to implement changes and increasing software entropy and the cost of further rework. Technical debt can accrue when teams delay performing regular maintenance on the system, and it can impact performance, scalability, resilience, or similar characteristics of the system. Technical debt can also accrue when teams take shortcuts, write poor quality code, or use outdated libraries and frameworks. Technical debt is a normal and unavoidable side effect of software engineering, and it should be managed and repaid like any other debt.