Especially on the web, but also in native mobile development, it is still very easy to get concurrent behavior wrong.
It is rare to see the code of a user interface that doesn’t have data races or use-after-dead problems related to components that fire off asynchronous chains that eventually trigger mutations.