Device sync is a mess if there are any segments starred on Strava! And it takes an excessive time.

I've been doing some research around how Strava live segments are synced to my device after I started noticing that every single device sync takes at least a minute when syncing over WiFi, even if I have just synced a few minutes ago, and can take up to 10+ minutes when syncing over mobile data.

Let me start with some facts:

  • According to Strava help, up to 100 live segments can be synced to a Garmin device
  • I have 92 segments starred on Strava - all running segments. 
  • Only 72 segments are synced to my Fenix 7X in Segments folder.
  • The list of segments seem to be changing on every sync. Some segments get deleted. Then on next sync they get copied again. Then on next sync some segments get deleted again. And so on.
  • If I star a segment and force a full sync, despite having that segment on my watch (I double checked that), the first time I run through that segment it never works, meaning that it never pops up on the watch during the run. On subsequent runs it may.
  • On every single sync, a large number of segments seem to copied to the watch. Even when all segments are up to date and I do a sync a few minutes later, it seems that at least 20 segments gets updated, as evident by file time stamps when I check segment files on the device (in Segments folder)
  • It seems Garmin Connect always syncs segments first (even if segments are up to date), despite having a new activity to sync. 
    • For example, today when when I finished a trail run away from home, I desperately tried to sync it to Garmin Connect and subsequently to Strava. The sync repeatedly failed because mobile data was spotty. But when I later checked the segment timestamps, it turned out that a bunch of segments were synced but GC didn't get to syncing my just finished run.

So there are multiple issues here, but the biggest one is repeated syncing of segments, which seems to be given priority over syncing of a new activity or health stats. I really doubt that segments change that much, certainly not within a few minutes between repeated syncs. At a minimum the app could keep some cache of segments and update on the watch only the ones that have truly change, and that should be a fairly rare occurrence. That should be fairly trivial, and that would already optimize the Bluetooth traffic. 

Furthermore, why does it repeatedly sync unchanged segments from Strava? It could start with a list of starred segment names (there is a Strava API for that) and only update segments incrementally - the ones that are new. It would probably need to do a full sync of segments from time to time in case the CR times have changed, but again that could probably be optimized and/or done by Garmin Connect in background. Why does it have to do all of that when I want to sync my activity as soon as possible? That seems dumb!