If, by some gross oversight, you aren’t already reading Brent Simmons’ blog, I highly recommend following it now for this ongoing series describing challenges and decisions as he implements sync for Vesper.

Sync is hard not because it’s difficult to write the actual code to do it, but because it’s difficult to design it — most big decisions come with tradeoffs and edge cases that you need to weigh and choose for your app.

Reading this while I develop Overcast, which includes a sync engine, is very helpful: I’ve made some different decisions as Brent since Overcast’s needs are very different, but Brent’s posts often make me reconsider a decision or accommodate a new edge case.