А почему опционально? Использование этого подхода для всего приложения наложит какойто оверхед?
Ну сайд-эффектики, идемпотентность и вот это вот все. Но это что касается юзер-кода. А могут быть ситуации, когда конкуренции приходят из IO: резолв эффекта, дом поменялся / задиспатчил чета и т.п. И тут нужно выстраивать стратегии решения конфликтов, которые абсолютно универсальными не бывают… Приходится делать advanced апи / доку что бы учить пользователя как-то на это влиять, в эдж-кейсах, а это оч сложно (особенно по DX).