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.**