I’ve used frameworks for about every language I’ve used throughout my entire career. I’ve always picked up a language and a framework at the same time – using the framework as a guide for what is possible, what the best practices are, and how to write idiomatic code. Quality, of course, varies by framework.
Over time, I’ve started to realize that frameworks provide magic, and there are secret incantations to bring out that magic. I can usually jump into the source and figure out what’s going on, but this detracts from developer velocity. And this makes the framework less appealing; I start to feel that I’m using a language on top of another language which quickly leads to a halt in developer velocity due to the law of leaky abstractions.
The law of leaky abstractions dictates that as abstraction complexity increases, the likelihood of exposing the underlying complexity also increases. Most modern frameworks allow for the customization of abstractions, allowing you to plug any leak. But there is always that one case the framework doesn’t cover and when you’re the only one with that problem, you really have to get your hands dirty.
I no longer use frameworks. Or I should say I build custom frameworks for the problem I’m trying to solve. I do this by piecing together libraries, which of course have their own leaky abstractions, but they are not usually monolithic. And if there truly is a leak and nobody has ever had the same problem, I’ll fix it and contribute back to the community. Actually, if nobody has ever had the same problem, I’m usually doing it wrong.
Inspired by this nice post over here – Stop Learning Frameworks.