Abstractions are the best Your code will be safer and more readable. It will prevent entire classes of bugs. It will be easier to add new features. You can inject dependencies at runtime to make testing easy. You can swap out your third party dependencies. You can adapt quicker to business logic changes. You can treat X and Y as the same thing. They’re both forms of Z, after all.