Fundamentally, it is much harder to understand potential interactions with many things occurring at once compared to a simple sequence of of events.
At best, we can support comprehension by constraining interactions or improving instrumentation.
For constraints we might favor FIFOs or CRDTs over general shared memory, use transactions, or immutable or linear data types. But there is no known set of constraints that is best for all use cases, so there will be awkward or low performance cases affecting DX.
For instrumentation, I think language support for 'continuous' probes would be useful, e.g. 'log(Message){Operation}' to continuously update Message while Operation is running, or 'assert(Condition){Operation}' to express an invariant over Operation. Closer, conceptually, to how we might probe a circuit board.