Factory factory…n is literally just creating an OOP closure for when your language doesn’t support first class functions, closures and/or currying.
Also metaprogramming and abstraction is literally the only way to actually manage and deal with the capriciousness of your stakeholders.
It’s not simple, because it’s literally not that simple. It’s Conway’s Law. That’s what being a programmer in the industry is. I run a platform team, and I get paid because I can organize and deal with technical risk and contingency better than anyone else at my company. You bet your ass I do metaprogramming.
Also my product itself is a factory factory factory. Users create processes to author content, author content, and that content is delivered to other users. All in the same system. Managing complexity is extremely important if you want to work on interesting things.
“And this is the way everyone is doing it now? Everyone is using a general-purpose tool-building factory factory factory now, whenever they need a hammer?”
I’ve had this exact conversation with a programmer who was retiring. He was complaining that I ask too much because I told him that he needed a more generic way to represent the logic that encodes how our end-users traverse the content that our authoring users create and manage. He literally said something to the effect of the above quote to me, but as complaining contempt.
The business explicitly doesn’t want to spend money crafting individual code bases and products and unique logic. Our system lives and dies by our ability to service our internal clients and meet their needs in a dynamic manner. We need manage each factory layer carefully because very often different clients want two different things at two different times, and so each decision needs to be encoded in a way that allows us to make future platform changes without having to sell the business on refactors.
Sure you’ll run into people who overuse things when it could be simpler from the business perspective. But the reality is that most programmers in the industry have never stepped foot into a well run shop. Most programmers in the industry haven’t actually launched a product tip to tail.
It’s very easy to criticize patterns when you don’t actually have to use them, you’ve never seen them being used properly, and you don’t know how and when to implement them.
You don’t know how many times I’ve had to explain what two phase migration means and how to do them across multiple dependency links in the chain.