[Design] Scoping out sharing-related 0.7 projects
Lisa Dusseault
lisa at osafoundation.org
Tue Feb 7 10:17:08 PST 2006
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/design/attachments/20060207/434e55ec/attachment.html
More information about the Design
mailing list