There&#x27;s an important kind of compromise that isn&#x27;t discussed as often: using an external library but behind an interface of your own design, an &quot;anti corruption layer&quot;. If the external dependency is limited to one small bridge in your application, then it&#x27;s so much easier to see what parts of the dependency you actually depend on, to upgrade the dependency when its API inevitably changes, to replace it entirely if it becomes a burden.