Another reason : you can send ops over the wire rather than data.   For example, you can send &quot;add 7 to x&quot; when the user makes a change rather than &quot;set x to 21&quot;.  Then you use the same code on server and client side to execute the ops.<p>If you structure your ops to be reorderable and composable you can get nice stuff like multi user editing, arbitrary undo, multi data centre synchronization, etc.<p>See the google docs papers for more details.