# Sync for GC Team Manager

DevFeed: [Sync for GC Team Manager](<https://devfeed.tech/articles/sync-for-gc-team-manager-19842.md>)

Original publisher: [Read original article](<https://tech.gc.com/sync-post-1/>)

Author: GameChanger

Published: 2018-01-24T20:52:42Z

Content type: article

Language: en

Sources: [GameChanger](<https://devfeed.tech/sources/gamechanger.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Code](<https://devfeed.tech/topics/code.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [article](<https://devfeed.tech/tags/article.md>), [backend](<https://devfeed.tech/tags/backend.md>), [data](<https://devfeed.tech/tags/data.md>), [distributed-system](<https://devfeed.tech/tags/distributed-system.md>), [reconciliation](<https://devfeed.tech/tags/reconciliation.md>), [sync](<https://devfeed.tech/tags/sync.md>)

## AI overview

This article introduces the sync system being designed for GameChanger's GC Team Manager app. It defines sync as keeping all devices on a shared, up-to-date view of team data, explains why near-immediate propagation matters, and outlines the distributed-system constraints shaping the architecture.

## Source excerpt

Introduction GameChanger recently released an all new app, GC Team Manager. This wonderful new product helps youth sports communities communicate, coordinate, and organize their team's lives. I have been lucky enough to be on the team that gets to build the backend for this new app. Throughout building out this completely new backend, I have gotten to work on a lot of different pieces of the system. The one I want to dive deeply into today is our sync system. Sync is a pretty generic, buzzwordy programming term. Therefore, it is important for me to clarify what sync means in this context. In this article, sync is the processes of ensuring that all devices in our system have a shared, up to date view of the world. If one device sees the state of Team A one way, all other devices should see the exact same state for Team A. If a device makes a change to Team A, that change is reflected instantaneously across all other devices. Note that this is the ideal version of sync. There are many constraints and challenges that make this hard to achieve but this is the goal I set about building towards. The reason sync needed to work this way in our app is: Users expect it - Users have begun to expect near immediate updates to propagate across their and their friends' devices. Avoids confusion between users - The closer to instantaneously that an app updates itself the less likely it is for two users to find divergences in their data. We want to avoid two coaches on the same team seeing different versions of that team's data. Keeps reconciliation simple - The longer period of time where data can diverge, the more work it can be to reconcile changes into one object. We want to try and limit the potential for divergence and to limit the reconciliation complexity. Having settled on what sync means, the rest of this article attempts to describe the design and architectural decisions and trade offs that went into solving the sync problem for our new Team Management app. There will be