
Here’s my take.
What the author is saying is true in terms of the ‘downsides’ of frameworks - they force coupling, dictate the way in which you write your code, and make it difficult to move to any different framework.
But that doesn’t mean frameworks are inherently bad.
I recently used the Kivy graphics framework to build a GUI app in python. Yes, this means I have to structure my app the way Kivy wants it to be, but it also means I get a huge amount of heavy lifting done for free. Kivy takes care of rendering graphics, bubbling user input through the component hierarchy, all the underlying tricky stuff, and means I can focus my time where I want to; adding functionality.
Frameworks control the way you code, but in return they let you get going very quickly.
The prescriptive nature of frameworks can also be a huge boost in a commercial setting, because it makes it easy for developers to work together with a common understanding on what they are doing. If someone has built a mobile app in React Native and they move to another team that is also building apps in React Native, they know what they expect to see when they clone the repo. It’s not a fresh learning curve every time.
The negatives the author calls out are totally valid, but IMO there are upsides to consider too.
I did consultancy work as part of renewing and replacing ancient software systems for an insurance company, and it’s amazing how little people actually know about how their own business processes are actually supposed to work.
Orgs are in the position where everyone who built a system is gone, and all the current people who work there defer to the system for how the processes work, without actually properly understanding the rules. And so the system itself becomes the arbiter of correctness.
This is obviously horrible because it ends up where nobody dares to touch the current system in case they break it in some way nobody understands.
We ended up speaking to people across the whole business to painstakingly work out what the rules really were, putting together a new system and effectively “dual running” that side-by-side with the old system, so we could compare outputs and make sure they were the same. In some case they were different, and in some of those cases it was actually because the old system was actually wrong, but nobody noticed!
It’s a mess.