Thank you for your great comment Martin!
I believe avoiding premature abstractions is the most important thing. Abstractions are hard to remove when you discover they are wrong — you will be tempted to build on top of them, thus creating more debt.
In my experience, even duplicating code is better than a bad abstraction.
To go back to the two points of your interpretation, I think they are correct, and most problems come from (1). More so, problems arise from the combination of A) not having a pr…