Skip to content

Conflict resolution

Conflict Resolution Deep Dive

Overview

When local and remote changes conflict, determine winner.

Core Concepts

Strategies: - Last-write-wins (simplest, timestamp-based) - Remote-wins (server authority) - Merge (combine non-conflicting fields) - Manual (show UI)

Code Examples

// Last-write-wins merge
fun mergeUser(local: User, remote: User): User {
    return if (local.modifiedAt > remote.modifiedAt) {
        local
    } else {
        remote
    }
}
// Merge fields
fun mergeUser(local: User, remote: User): User {
    return User(
        id = remote.id,
        name = remote.name ?: local.name,
        email = local.email,  // prefer local
        modifiedAt = maxOf(local.modifiedAt, remote.modifiedAt)
    )
}

Senior-Level Insights

  • Log conflicts for analytics
  • Version vectors for causal ordering
  • Expose unresolved conflicts in UI