There's an old adage, don't reinvent the wheel. In other words, don't fix what isn't broken. But sometimes that's precisely what we need to do.
In reality, not all wheels are created equal. Bicycle wheels serve a slightly different purpose than train wheels. The same is true with the tools of our software. Different tools are made for different jobs.
As craftsmen, we like full test coverage. We like the SOLID (and related) principles. We like maintainability. We have a very specific philosophy of how writing software works best. Yet many tools at our disposal make these harder to achieve, because they weren't written with this same philosophy in mind.
We should strive to leverage existing tools when possible. But when we find ourselves wrestling with frameworks and libraries, we should reexamine everything in light of our principles.
Is the tool giving us so much grief because it's just designed with opposing or obsolete values in mind? If so, perhaps it's time for us craftsmen to take some time on the side to write a better tool, one that fits our philosophies and has our values in mind.
This isn't infeasible. Matz and Rich found that other languages weren't fitting their philosophies, so they created Ruby and Clojure respectively. Not satisfied with the productivity PHP gave him, DHH wrote Rails.
Let's not be intimidated by any such problem that comes our way. We're smart, capable people. We have the time and ability and resources. And if we really do care about our craft, we should care about our tools. So when appropriate, let's not be afraid to reinvent the wheel!