In this chapter, we exposed the underlying system state, implemented bi-directional communication between the app and people using the app, predicted when the app is about to go offline, made compensation for turbulent network conditions, and split up the database to account for more granular caching behavior.
In the next chapter, we'll address the mother of all synchronization problems. What happens when changes are made to an offline app on multiple devices? Which change wins? How are these conflicts remediated? We'll investigate strategies to deal with this split-brain problem and implement one of them.