The number of code repositories I've seen where the database layer was (leakily) abstracted away "in case we ever need to migrate" is WAY greater than the number of code bases where there was
actually a need to migrate.
Yet they all still introduced the headaches of having to update the abstraction layer whenever you wanted to make schema changes