CRDTs are useful to be aware of, but they are not a silver bullet they might appear based on the paper and online sources.
They are conflict-free only because they hide conflicts by forcing a consistent order on concurrent updates. How do they do it? By using logical clocks to version events. A logical clock is not magic. It orders concurrent events arbitrarily. Is this correct? In practice, probably not, meaning that more recent updates can be lost in favor of less recent updates. What does 'recent' mean? For a user it means latest in physical time. Just because the system doesn't know any better than to arbitrarily order a pair of events (that appear concurrent), doesn't mean the user doesn't know which event comes first.
This is why not everything is implemented as a CRDT and conflicts will always exist in use cases where updates must never be lost.
They are conflict-free only because they hide conflicts by forcing a consistent order on concurrent updates. How do they do it? By using logical clocks to version events. A logical clock is not magic. It orders concurrent events arbitrarily. Is this correct? In practice, probably not, meaning that more recent updates can be lost in favor of less recent updates. What does 'recent' mean? For a user it means latest in physical time. Just because the system doesn't know any better than to arbitrarily order a pair of events (that appear concurrent), doesn't mean the user doesn't know which event comes first. This is why not everything is implemented as a CRDT and conflicts will always exist in use cases where updates must never be lost.