AI Makes Me More Comfortable with Merge Conflicts
Cheap models are changing how much complexity I’m willing to carry in personal apps.
While designing Epicenter’s local-first sync, I used to rule out plain files and Git because I thought merge conflicts were too difficult to deal with. But as AI becomes ubiquitous and models get cheaper, I feel more and more comfortable letting those conflicts happen.
Your merge algorithm should still be really, really powerful. It should handle everything it can. But some conflicts require a value judgment. If you add a sentence in one version of a paragraph and delete another sentence in the other version, should both changes survive? Does the new sentence still make sense without the one you deleted?
For those cases, I think it often makes more sense to have a cheap model look at the conflict individually and try to work out what you meant.
Especially in personal apps, where there’s usually only a single writer. I’m not collaborating with a hundred people on the same document. It’s usually just me, making changes in different places.
That’s been the big unlock for how I’m approaching this. I’m more comfortable with occasional conflicts because I have a way to resolve the ones that need judgment. And that makes me more comfortable moving away from Yjs and complex CRDT structures, in favor of just Git and Markdown, which feels like a more durable foundation.
In some ways, that’s a huge relief. It makes these apps a lot easier to test and iterate on, and it makes it easier to go inside and fix the data.