Great question. The granularity of your synchronization impacts the user experience, and sometimes the product offering itself. It can go from &quot;replace the whole object&quot; all the way to &quot;string operations are merged without conflicts to match user intention&quot;, with &quot;centralized resource locking&quot; somewhere along the way.<p>The goal product-wise is to ensure intention preservation, but that is hard to achieve in general as intention is tied to what the product does.<p>For instance, if you have an integer and an increment operation, say, in a HN-like app to track upvotes. If your synchronization simply resets modified values with a newest-win approach, the following situation would lose an upvote: you have 5 upvotes, A and B both upvote you simultaneously, each setting the number of upvotes to 6. The server tells A that the number of upvotes has been set to 6, then tells B the same thing, and they are both happy. However, product-wise, it should have been 7 instead.