I personally like "Optimistic Updates".
Instant feedback is always great and most of the times the update will succeed at the backend. So, IMO the best way to do this is to show instant feedback, but still wait for the server to respond in the background. In case you don't hear back from the server or it responds with some error code, you will rollback the UI changes and notify the user that the changes couldn't be applied. For example, when you write a new comment on Hashnode you see it in the UI instantaneously. If due to some reason the comment can't be synced with the server, the changes are reverted with a warning.
Of course, there are no pre-defined rules. Different architects and websites have different preferences and you should stick to what makes more sense in your app.