[Design] Scoping out sharing-related 0.7 projects
Mitchell Kapor
mitch at osafoundation.org
Tue Feb 7 08:43:21 PST 2006
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/design/attachments/20060207/44a132c5/attachment.htm
More information about the Design
mailing list