You can carefully pick an order of features to build in a way, that every new feature will invalidate an abstraction correctly implementing all the previous features.
I don't think it is malice or incompetence, but this happens too often to feel good.