I learn this in [[Factory pattern]], [[4 Observer pattern]] and [[Typescript constructor initialization order issue]].
A tradeoff exist because an ideal solution doesn't exist. For exist in [[Typescript constructor initialization order issue|typescript circular dependency in constructors]], it is logically impossible to achieve the ideal code and therefore we need to use a factory.
In every tradeoff, we need to think at least 2 solutions, sometimes three.
For example, to solve the [[Typescript constructor initialization order issue|typescript circular dependency in constructors]] issue, we can either use factory pattern or observer pattern. Then we analyse the difference (+ve/-ve).
![[tradeoff 2023-12-27 14.24.30.excalidraw.svg]]
We analyse the opposite side of the spectrum, and if the effort of achieving either side is too big and not very practical, we need to come up with a compromise solution.
## Conclusion: avoiding tradeoff, just get things done
**Tradeoff needs decision making because it basically means there is no solution strictly better than the other. And we would want to avoid tradeoff.**