The &#x27;happy path&#x27; (everything goes right) is easy, as you said.<p>The hard part for me was making sure the state in the client is always in sync with server, in a valid state, even when things go wrong.<p>On a slow connection, another update made by someone else to board may arrive between the optimistic client update and the server confirmation, which can lead to a broken state on client.<p>Or, user may do an update on the optimistically added card, like editing, while the first action is not confirmed by the server yet. You either need to queue these actions, or generate the id of the card on client side. And you need to have reliable &#x27;rollbacks&#x27; on the client when server rejects the action for some reason.<p>There are many more edge cases like that. I&#x27;ve solved all these problems eventually, but it took much more time for me than building the happy path.