I'm surprised the obvious solution is not mentioned. That is, the apps should queue up their changes in a system-wide log (the format of this log is left as an exercise for the reader) and the OS must play this log as and when it finds opportunity and/or driven by user defined rules (like the "midnight sync" rule mentioned in the post). This means that only one process (the system sync'r process) will ever do the syncs. This scheme also allows for more advanced features like user-defined priorities on which syncs are most critical (e.g, my calender entries take precedence over the "read it later" list I might have created in my browser).