[Design] Scoping out sharing-related 0.7 projects

Mimi Yin mimi at osafoundation.org
Tue Feb 7 13:23:50 PST 2006


As Mitch pointed out, it probably doesn't make a difference from the  
user's point of view where the early bird wins or the last synced  
version wins. It seems like we all agree that"

+ users should get notification of conflicts
+ users should be able to see if there was a conflict when they view  
the details of an item
+ user data should never be blown away and that
+ users should have a way to "restore" their changes.

Whether we do that in some kind of specialized UI or just an item in  
an Activity Log is a matter of staging?

To answer Lisa's question, I think all sharees should see conflicts.

===

One way to minimize conflicts (that we've discussed in the past): We  
could also make it so that users always suck down changes from the  
server before uploading their own changes...
+ User A syncs changes to Item Foo
+ User B downloads user A's edits to Item Foo
+ User B's Chandler detects a conflict and shows User A's changes to  
User B
+ User B can either go with User A's changes or override them with  
his own
+ User A and all other sharees would never has to know there was a  
conflict

Mimi


On Feb 7, 2006, at 10:17 AM, Lisa Dusseault wrote:

> One possible difference to the user, between what Morgen described  
> and what Mitch described (assuming of course I've interpreted  
> correctly), is whether "third party" users see that there's a  
> conflict.
>
> E.g. when A and B make conflicting changes to a resource, as I  
> understand in Morgen's proposal for 0.7, only the user whose synch  
> happened last would see that there was a conflict and have an  
> option to resolve it.
>
>    Whereas, in Mitch's proposal for the long term, not only A and B  
> but also C and D would be able to see that conflicting changes had  
> been made to a resource, that hadn't been resolved yet.   They can  
> all know there's some confusion e.g. about what room to meet in,  
> and anybody has a chance to resolve the confusion.
>
> Obviously since these are short term vs. long term proposals  
> there's no immediate problem but I thought it interesting to  
> highlight an essential difference.
>
> Lisa
>
> On Feb 7, 2006, at 8:43 AM, Mitchell Kapor wrote:
>
>> My post, to which Morgen replies, was actually in response to  
>> Mimi's proposal, not the current implementation or Morgen's plan.   
>> But since I omitted including mimi's original, I inadvertently  
>> created confusion.  Sorry.  For completeness, here is what Mimi  
>> wrote.  I'm not going to respond point by point to Morgen;  I  
>> think it would only confuse things further.
>>
>> - I have no problem with implementing in stages.
>>
>> - While the repository needs to have just one "official" winner in  
>> case of a conflict in the current domain model, we could of course  
>> adapt the domain model to add something which would allow multiple  
>> values for attributes in conflict or a sidecar attribute and then  
>> have a UI which utilized whatever we did.  I think though we need  
>> to decide on what the correct behavior is for the user and then  
>> see how to model it in the repository.
>>
>>
>>> 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 flags are going to be employed, it's important they be visible  
>>> in the summary view, not just the detail view, if they're going  
>>> to be noticed.
>>>
>>> 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 10:43 PM, Morgen Sagen wrote:
>>
>>>
>>> On Feb 6, 2006, at 4:50 PM, Mitchell Kapor wrote:
>>>
>>>> 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?
>>>
>>> At 12:30, B would automatically download A's 12:00 change, A's  
>>> change would "win", and B's local 12:20 change would be stored in  
>>> a Conflict Notification to be resolved at B's leisure.
>>>
>>>> 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?
>>>
>>> As implemented today, the last sync doesn't win.  It's the first  
>>> sync that wins.  A's 12:00 change wouldn't be blown away in this  
>>> case -- A's change remains both on the server and in A's  
>>> repository.  However, say B gets back to his desk at 1:00 and  
>>> notices the Conflict Notification in the sharing log.  If B feels  
>>> that A's change is okay, he does nothing; otherwise if B wants  
>>> his 12:20 change instead of A's 12:00 change, he clicks an "I  
>>> want my change to win" button or something.  At 1:30, B's change  
>>> would go to the server and at 2:15, A's client would sync, B's  
>>> change would appear in A's repository,  and A would get a Change  
>>> Notification in his log.
>>>
>>>> (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.)
>>>
>>> Actually, it's the early bird that wins in the current  
>>> implementation.
>>>
>>>> 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.
>>>
>>> In this case, B's 12:00 change would go the server at 12:22, A  
>>> would download it at 12:25, B's change would "win", A's local  
>>> change would be logged in A's repository as a Conflict Notification.
>>>
>>>>   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.
>>>
>>> It's always going to be the case that one user's changes make it  
>>> to the server before the other user.  The second client to sync  
>>> is always going to have to be the one to perform conflict  
>>> resolution, unless we change our model of how the server stores  
>>> items.  It's all about how we present the info to the user...
>>>
>>>> The only right thing to do is to carry both version and let the  
>>>> user decide.
>>>
>>> Right, and this is the biggest question -- how we support  
>>> presenting two versions of an item to the user (both from the UI  
>>> design and engineering points of view).  You want the application  
>>> to have both versions of the item co-existing in the repository  
>>> as equals it seems, not a winning change and a losing change.
>>>
>>>> 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.
>>>
>>> As far as I know, when there is a sharing conflict, under the  
>>> hood one version indeed needs to be the "winner" at the  
>>> repository level -- i.e., those winning changes are applied to  
>>> the item -- and we can store the losing changes somewhere for  
>>> later access.  We can design the domain model to provide the UI  
>>> with as much help as we can; for instance, having bi-directional  
>>> references between Conflict Notification and the Item that had  
>>> the conflict -- that way whatever UI is displaying an item has  
>>> easy access to unresolved conflicts.
>>>
>>> Anyway, I was just setting out to do an extremely simple UI for  
>>> 0.7, since most of the work is going to be under the hood to  
>>> allow for background synchronization.  I am fine with punting a  
>>> fancy conflict resolution UI to a later release, but we should at  
>>> least have Notifications of conflicts available to the user  
>>> (which I proposed doing for 0.7 as a list of items in the summary  
>>> table).  My simple 0.7 conflict resolution UI was going to be a  
>>> detail view that contained:  item name, attribute name, winning  
>>> (remote) value, losing (local) value, and a button labeled with  
>>> the equivalent of "apply my change instead"; just something to  
>>> let us work out the kinks of dealing with conflicts at the  
>>> framework level.
>>>
>>>
>>>>> 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.
>>>
>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>>
>>> Open Source Applications Foundation "Design" mailing list
>>> http://lists.osafoundation.org/mailman/listinfo/design
>>
>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>
>> Open Source Applications Foundation "Design" mailing list
>> http://lists.osafoundation.org/mailman/listinfo/design
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "Design" mailing list
> http://lists.osafoundation.org/mailman/listinfo/design

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/design/attachments/20060207/17617980/attachment.htm


More information about the Design mailing list