You could get rid of all the OOP and keep shared mutable state and you wouldn't be any better off. Possibly worse because you don't even have OOP patterns to follow and find where problems arise.

Most don't even do OOP right--instead of "tell don't ask", writing Banana-Gorilla-Jungle methods.

But you can not do it right. In the end the programmer apoears, modelling himself as conductor into his miniature world. The marshaller, the processcontroller, the command sender, was you thinking procedural all along.