I want to offer a different perspective on handling conflicts.  For the sake of simplicity, let's assume there are two users, A and B, each synching once an hour hour.  (I don't think we are going to support more frequent synching due to issues with managing server load.)  When synching is done with this frequency, if two people change the same item and attribute such as to create a conflict, there is no reason to prefer one to the other, even though, by definition, one change is going to hit the server first.  We have to stop thinking that one change precedes the other.  From a God's-eye view it's true,  but from the user's perspective, changes occurring in the same synching period happen essentially simultaneously.  Here's a worked out example.

Let's assume A is scheduled to sync at 15 minutes past the hour and B at 30 minutes past the hour.  (To balance server load, time time of synching should be chosen somewhat randomly).  Now A makes a change at 12:00.  At 12:15 A's change hits the server.  Now let's say B changes the same item at 12:20.  B won't see A's change since the last time B synched was 11:30.  As far as B is concerned, B is editing an unconflicted calendar.  When B syncs at 12:30, a conflict is detected.  What should happen?  

Let's also assume, not unrealistically, that B isn't at the computer at 12:30 to notice the change.  If "last sync wins" then when A comes back to the computer at 1:20, A's change has been blown away.  A says to self: WTF?  

(It could even be argued that A is being punished for being prompt in the case both A & B noticed a problem with same event but chose different ways to fix it.)

Also, whether a change is over-written or not will be a random function of when the user's computer is set to sync vis a vis someone else's computer.  I think this will make people crazy.  If A made a change at 12:00 and B a change at 12:20, but it happened that A was synching at 25 past and B at 22 past the hour, then A's change would win.  In this case A would get what was expected, but B would be going WTF.  It's the opposite outcome as before even though A's and B's behaviors were identical.  It would be very disconcerting to have who wins and who loses essentially be random.  I think users will find it plain unacceptable.  It will create enormous support headaches trying to explain it.

A change made later on the clock but between two sync periods don't really happen "later" from the user's point of view.  The changes happen "simultaneously".  Maybe a better way to put it is that any two changes being made within an hour of each other happen more or less simultaneously as far as the user is concerned (when synching is only done once an hour, which is the driving assumption.  If synching were instantaneous, these issues would not arise.

The only right thing to do is to carry both version and let the user decide.  

If, as a matter of simplifying the UI, one version was made "authentic" but flagged and the other was carried along in some sort of sidecar with the item (not in some separate log) and the two were easily switchable, it would be ok with me but only on the grounds of expedience.

We went through a lot of these analyses when we designed Foxmarks (Firefox bookmark synchronizer) and this is where we came out.  







On Feb 6, 2006, at 2:48 PM, Mimi Yin wrote:

Here are some proposals for lightweight conflict management in 0.7

Providing users with visual feedback
+ "Flag" on items that have been newly added to a share/ edit or changed / have conflict(s)
+ "Flag" is displayed in the mark-up bar of changed / conflicted items
+ User can click on "Flag" to view edit/conflict details in the Activity Log
+ In the Activity Log, user can click on "something" to take them back to the original item detail view

If you're editing a field that has been changed by the server
+ Phase 1: Chandler over-writes the user's edits with the server's changes
+ Phase 2: Can we intercept item change notifications coming from the server before they get displayed in the detail view? The user's edits win and a "conflict" Flag is raised on the item in the mark-up bar. Users can click on the Flag to see what got sucked down from the server.
+ Phase 3: Display a modal dialog: The "notes" have been edited since you last synced. (Here are the edits). Do you still want to proceed with your edits? Okay Cancel. (Not sure if this is necessary.)

Server-side conflicts
+ Last version to get synced wins
+ Conflicting versions are both pulled down and "stored" in the Notifications/Activity log as Activity notifications.
+ User pulling down conflicts can examine the log to see what happened, but there doesn't need to be a "compare versions" UI in 0.7

Mimi

On Feb 6, 2006, at 2:18 PM, Sheila Mooney wrote:

I just wanted to point out that any kind of sophisticated conflict resolution or versioning handling UI is out of scope for 0.7. We will likely implement things in stages but the first step for all of this will be to record the conflicts and log them in a way a user can view them and manually make updates if they choose to. Once we get that working (just to understand more about when conflicts are happening), we can figure out what enhanced UI would be the next logical step. Perhaps some of this will be done during 0.7 but I think it's important to get something primitive up and running first.

We do need to make a decision about how we will handle attributes that are currently being edited in the UI and are modified via background sync. Mimi is about to post something on the design list that focusses in on this discussion further.

On Feb 6, 2006, at 1:58 PM, Jeffrey Harris wrote:

Hi Folks,

I, too, am late to this thread, sorry.

Bryan Stearns said:
This indicates that we end up needing a way to present two detail views
side-by-side. For approach 1, we'd also need to teach attribute editors
to conditionally display the "local" or "remote" version of the item;
for approach 2, we'd need to teach them to incorporate newer values from
a UserNotification item. Either way, this mechanism also requires
support from the change-notification mechanism (since the detail view
uses the change-notification mechanism to communicate with itself), and
would require CPIA work to handle two rendered detail views at once.
(I'm sure there's more than this, but I'll wait until more work's been
done on an intended user-level design.)

I'd been envisioning a slightly different picture of how we'd render
different versions of what, in the user's mental model, is the same
item.  Changes received via sync seem like a special case of the general
problem of several people editing the same (mental model of an) item.

==> As an aside, I have a suspicion in some cases we'll represent
different versions using versioning in the repository, at other times
we'll have different (linked) items under the hood, to match the
"emailed item" model where there's no authoritative source of truth.
I'm going to approach this by assuming we can work out the
representation issues. <==

Here's my picture, based on what I think I've understood Mimi to be
describing about scheduling workflow.  If an item has multiple versions,
the most recent version would show up in the table view, but it would
have a thread expansion widget associated with it to open different
versions in the table view.

This would avoid the need for multiple detail views; users could scroll
through different versions in the table view.  It would be nice to
highlight changed fields to call out distinctions between versions.

To do this at a basic level, the table view would need support for
something like threads.  I don't know if that's doable in 0.7, but it
feels like a more appealing path to follow than trying to render two
detail views.

In this model, there could still be an RSS style view of recent changes,
 it would be basically look like sorting a collection into threads
sorted by an imagined "last time modified by someone other than me"
attribute.

Sincerely,
Jeffrey
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Design" mailing list

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Design" mailing list

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Design" mailing list

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Design" mailing list
http://lists.osafoundation.org/mailman/listinfo/design

Reply via email to