Hi Folks,

Last week Mimi and I sat down and talked about pain points associated with sharing once collections are set up and working. We came up with a list of issues and possible remedies.

The executive summary is that there are still several identified issues causing sharing pain, broadly grouped into:

1. Failure to sync
2. Inaccurate pop-to-now
3. Pop-to-now with the byline showing the wrong editor of the item
4. Items have conflicts, but the conflicts are in error or not obviously associated with a user-visible attribute

We came up with possible remedies to these problems, based on my understanding of the underlying causes. It's possible that fixing just the first few problems may get the frequency of pain low enough that we don't need to address all issues.

Problems
========

The first problem blocks usage, the rest mainly affect people heavily using shared collections and the dashboard view. These latter problems aren't show-stoppers by themselves; the occasional confusing item popping to now doesn't make Chandler useless. Unfortunately, the frequency of inaccurate pop-to-nows is high enough to make the NOW section's signal-to-noise ratio much lower than it could be.

1. Collection fails to sync [1]
-------------------------------

Esther's been seeing the main example of this [2]. What's happening in her particular case is the desktop and the server have different pictures of what an item's state is, so when the desktop sends a diff, the server rejects it for not containing enough information. It'd be great to figure out why this is happening, unfortunately we haven't had much luck diagnosing the problem so far, but even if we can't completely stomp out this problem, we should fail more gracefully.

A fix to this could be to have the server's failure include a machine-readable error (right now there's text that contains the failing UUID, if we put that UUID in an invisible XML element, the desktop could try resetting that item and sending the whole item, not a small diff). There'd be a little bit of work on the server side, plus a fair amount of desktop sharing work.

[1] http://chandlerproject.org/Planning/OneDotZeroBugReset#CriticalBugs
[2] http://lists.osafoundation.org/pipermail/chandler-users/2008-January/001127.html

2. Mysterious pop-to-now [3]
----------------------------

There are a wide variety of reasons this is happening, it may be OK if we fix 90% of them rather than 99% of them. With that in mind, my educated guess is that the lion's share of these could be fixed by adding a whitelist to the logic for deciding whether a sharing change should pop an item to now. Right now, changes to most attributes (even if their values aren't visible to the user in the detail view) will trigger a pop-to-now.

Whitelisting attributes isn't 100%, occasionally it's ambiguous whether a change to an EIM field will cause a user-visible change, but there are many fields that clearly don't directly effect what a user sees in the detail view, these shouldn't be allowed to cause a pop-to-now.

A first cut at this would be fairly simple to implement on the desktop.

There are also issues with Chandler's understanding of email addresses being case-sensitive; it's not clear to me if these issues would be solved by white-listing, there may still be work for Brian Kirsch there.

[3] http://chandlerproject.org/Planning/OneDotZeroBugReset#PopToNowBugs

3. Inaccurate byline
--------------------

There are two main sources of inaccurate bylines I'm aware of: The first happens when two users have non-conflicting changes, but they sync out-of-order. The byline is chosen based on the latest change, but the change time is based on when the user actually changed the item in Chandler, not when they synced. So out-of-order syncs will cause the byline to stay the same, even though a new change has been merged in, which can be disconcerting for the person who synced first.

A solution to this would be to add additional fields to the ModifiedBy record, sending two users after a merge, and rendering an appropriate message in this case. This is quite straightforward, but it might require a bit of server work.

The second main cause of in accurate byline happens when an item is deleted. The server stores a "tombstone", recognizing that the item's been deleted, but it doesn't know *who* deleted it. This isn't a huge problem for normal items (although it's a little annoying). For recurring events, though, deletion actually means a triage status change. In these cases, it's pretty confusing to see an occurrence pop to now with nothing but a triage status change and an inaccurate byline.

One solution to this would be to change morse code to include information about who's deleting an item, and having the server store that alongside the existing tombstone. That might be a lot of work, though.

The recurrence problem could be fixed by changing the way triage-only modifications are sent to the server. Unfortunately, changing this would either break compatibility with existing data, or require a huge amount of effort to maintain backward compatibility, so I think that's out. This may just be a problem we live with.

4. Spurious conflicts
---------------------

Conflict resolution aims at preventing users from losing data. Unfortunately, there are so many false positives that I literally had never seen a *real* conflict until collaborating on writing this document! All the other hundreds of conflicts I've seen have been spurious, adding noise to my Chandler use and forcing me to examine and click through too many conflict resolution dialogs.

Many spurious conflicts appear to come from having the same item shared in multiple collections. When a user changes a multiply shared item locally and syncs, the first associated collection receives the item change. The second collection then sends the same change back. This ought to result in a no-op, but apparently it doesn't always (that's a bug in and of itself).

While ideally we'd fix the underlying bugs that are causing spurious conflicts, it's not clear to me how much effort it would take to solve the problem.

A radical, alternate approach that might reduce this pain, while still providing data preservation would be to

A) Store item state before every sync, and after every sync (we mostly do this now) B) Provide an HTML picture of the history of an item, similar to the view currently available by pressing F4 but focused on reproducing only the attributes visible in the detail view C) Auto-resolve *all* conflicts, with the more recent change winning, then use the banner button currently associated with conflicts to alert users if there was a conflict on a user-visible field

Implementing this strategy would be a moderate to a large amount of work, so it's not clear if it's worth doing, even if we agree it's desirable. On the plus side, a clean-UI for the history of an item is an attractive feature in it's own right, so such an approach could be implemented incrementally.

Conclusion
==========

I prioritize these roughly in the order described. Recovering from sync failures and whitelisting user-facing attributes seem relatively straightforward with a high value. Expanding the ModifiedBy record to work better with merges seems lower priority but simple and valuable. Morse Code changes to deleted items, viewing item history and auto-resolving conflicts seem potentially valuable but possibly expensive.

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

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to