I love these thoughts, and I try to reason about my own code while keeping them in mind, but it is hard to argue with a very simple truth: It is much harder to write functional programming applications. Harder than mitigating the outages and scaling problems of imperative applications. In terms of building applications that people actually use, it is generally easier to find a junior developer than on that can adhere to no-local-state standards.
I disagree that writing functional programming applications is inherently harder. I agree that it is easier to use your imperative programming base to fix buggy imperative programs than it is to convert them to functional programs.
it is hard to argue with a very simple truth: It is much harder to write functional programming applications. Harder than mitigating the outages and scaling problems of imperative applications.
Can you be more specific? In my experience, I have not found functional vs imperative to have be a huge distinction in regards to this. Problems are hard no matter what tool you use to solve them in. Mostly, I have just found FP providing a model for making dealing with bugs easier, but it depends on the developer to follow that model, which many don’t.
Note that if you use standard OTP containers, like gen_server, there is a mechanism for querying the state of one even if it does not expose an API for it. But it turns out to kind of stink since much of the state doesn’t necessarily make sense to the outside world.