It is not dead in Haskell precisely because of controllable side effects. It is dead in some other languages precisely because of lack of controllable side effects. In .Net, for one example, STM execution was 4 times slower because of arbitrary modification of state [1].
Also, the rule of thumb is that you have to use STM, and it is mandatory, if there are more than one developer working on a project or if you have more than one module in your solo project.
[1] https://haskell-cafe.haskell.narkive.com/t6LSdcoE/is-there-a...
Also, the rule of thumb is that you have to use STM, and it is mandatory, if there are more than one developer working on a project or if you have more than one module in your solo project.