I'll bite. Neither. Both. Depending on system.<p>When the "state" is large, or changes often, obviously you can't send full state every time - that would be too much for end-nodes to process on every event. Both cpu - deserialization, and bandwidth. Delta is the answer.<p>Delta though is hard, since there always is an inherent race between getting the first full snapshot, and subscribing to updates.<p>On the other hand doing delta is hard. Therefore, for simple small updated not-often things, fat events carrying all state might be okay.<p>There is a linear tradeoff on the "data delivery" component:<p>- worse latency saves cpu and bandwidth (think: batching updates)<p>- better latency burns more cpu and bandwidth<p>Finally, the receiver system always requires some domain specific API. In some cases passing delta to application is fine, in some cases passing a full object is better. For example, sometimes you can save a re-draw by just updating some value, in other cases the receiver will need to redraw everything so changing the full object is totally fine.<p>I would like to see a pub/sub messaging system that solves these issues. That you can "publish" and object, select latency goal, and "subscribe" to the event on the receiver and allow the system to choose the correct delivery method. For example, the system might choose pull vs push, or appropriate delta algorithm. As a programmer, I really just want to get access to the "synchronized" object on multiple systems.