Good abstraction is hard - but here’s a clear statement.
If you read your code and can’t tell the usage of abstractions apart from the abstractions themselves, the abstractions are bad.
Good abstractions are conceptually far from their applications. The code using the abstraction is doing something completely different than what the abstraction cares about.
Sure, your code should do something. But the domain of your problems is not the domain of your abstractions.
Make strata.