[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