Trade-off
A trade-off, also called a compromise, is a balance struck between two desired or required properties that are usually incompatible or in tension with each other, such that improving one comes at the expense of the other. A common example in software is the balance between memory consumption and runtime speed. Caching a computed value spends memory to save time.
Trade-offs are a structural feature of software design rather than a sign of a poor one. Every quality attribute carries a cost measured in some other attribute. Stronger security adds friction to usability, higher availability costs consistency, and so. There is rarely a change that improves one property for free.
The colloquial version of this is "there’s no free lunch". A design decision doesn’t remove a cost, it only chooses which cost to pay and which quality attribute to spend it on.
Because trade-offs can’t be eliminated, the discipline lies in making them explicit and deliberate rather than accidental. This is a large part of the work of software architecture, which resolves competing quality attributes using catalogued architectural tactics.