The best code I've seen uses abstractions to decouple itself from the libraries and frameworks it uses. I don't see any references to libraries or frameworks within the codebase, except in thin layers at the outskirts.
The worst code I've seen uses 1,000 frameworks and libraries without abstracting its communication with them. It calls their API's directly, inherits from their classes, and passes their domain objects to its own API's.
Abstractions should reduce complexity, making code more robust and simpler to understand. It doesn't always work out that way, especially when abstractions have poor names, but it can. If abstractions truly decreased productivity, then machine-code programmers would blow everyone else away with their speed and efficiency.
P.S.
I have a deep respect for machine-code programmers.