Two devices can save different positions for the same episode. A phone may hold a newer point after a commute, while a tablet still shows an earlier session. Picking the largest position seems simple until someone deliberately restarts the episode.
A conflict policy must account for user intent as well as numbers. Write the policy before implementing automatic merges.
Compare meaningful context
Record local change time and ownership where your design needs them, but do not assume every device clock is accurate. Use the ordering or revision behavior documented by the backend. If the contract does not promise conflict resolution, your application needs to handle that uncertainty.
Keep an explicit restart or “mark unplayed” action separate from normal forward listening. That gives the system more information than a smaller numeric position alone.
Avoid letting a background screen write an old position merely because it was restored. A device that has not played or received a new user action may have nothing new to save.
Work through three examples
First, continue listening on device A and then open B. Second, restart on B after A previously reached the middle. Third, use both devices offline and reconnect in reverse order.
For each sequence, decide what the listener sees, whether a choice is needed, and which update wins. Test the policy with the same sequence instead of relying on happy-path demonstrations.
Sometimes a small “Continue from another device?” prompt is more honest than an invisible merge. The right design depends on your app, but it should never be an accidental side effect of sorting progress values from highest to lowest.