CloudServices/Sync/FxSync/2011H1Plan
Contents
[STALE] Work item prioritization for Sync
This is supserseded by the FxSync Roadmap.
This is based on Philipp's client priorities notes. Yes, it's not so much "H1" as "Hmiddle", but that didn't really fit.
Bugs with P* flags set: http://cow.org/r/84X
Some of these are work items discussed in this document; others are just bugs that I think it's about time we addressed.
Assumptions
- It's pretty much going to be me working on Sync for the next little while, eagerly awaiting the return of Philipp. Identity won't be a big drain on my time.
- We might have some interns or new hires at some point. (May 1st?)
Observations
- Many of the desired work items have external dependencies:
- Improving setup process, push to mobile: waiting on UX, user studies
- Asynchronous interfaces for forms, passwords, et al: simply too large and too core for us to take on, so we just have to cajole until they get done
- Some work items are self-contained, which make them ideal for people off the critical path (contributors, interns, new hires) to take on without getting mired in dependencies:
- New sync engines: add-ons, favicons, web apps, localStorage
- CrossWeave 2, despite its size
- Account portal extension to deauthorize a device
- Push notifications are not Sync, regardless of what PMs say. :D
Focus points
We have three high-level goals right now.
1. Get people using Sync: grease the rails.
2. Keep people using Sync: improve performance, add features.
3. Improve our codebase to allow us to more quickly deliver working, performant code.
My proposal is to take care of parts of number 3 first, because it reduces ongoing maintenance burden, then address platform-level improvements in turn until high-impact tasks with external dependencies come due. As new contributors arrive, they can take on the self-contained work items as appropriate.
Bucket 1: main developer/prerequisites
These are a simple sequence, not prioritized. Simple prioritization ignores the fact that features can be low priority (i.e., fine to ship without them) but high impact (make life easier elsewhere) or quick to implement. It also ignores interdependencies, required expertise, etc.
1. Get rid of 3.5/3.6 compat code.
- Should be quick.
- Knock-on maintenance and perf improvements forevermore.
- Prerequisite for Fx4+ async API adoption anyway.
- Update Sync to use new 4.0-specific platform features.
- Detailed notes:
- use Services.jsm, XPCOMUtils.jsm, NetUtil.jsm, FileUtils.jsm where possible
- use NetUtil.BadCertHandler?
- implement + use toolkit generic async resource bug 581560
2. War on sync (event loop, API changes, avoid synchronous IO).
- bug 600059, /Services/Sync/WEP/116.
- Introduce async APIs across SyncEngine, Store, Tracker
- This simply needs to be done, and as soon as possible.
- Paying off the massive engineering debt that came from Labs. SYNC, Y U NO ASYNC?
3. When ready, tackle important items from Bucket 2.
4. Instant Sync.
- Big usability improvement; no complaints about sync on exit, reduced chance of big blocking syncs.
- Might be blocked by needed performance enhancements…
Bucket 2: "when ready"
1. Asynchronous platform APIs for forms, passwords, bookmarks.
- N.B., we should be active clients for this work, or even hire someone to do it.
2. Improve setup process.
2. Push to mobile.
Bucket 3: self-contained
These haven't really been prioritized. It's a choice between "make existing stuff better", "add features", "add engines", or "improve quality".
1. Crossweave 2
- Big task, but eminently standalone.
- lives in services/sync/tests/...
- maintained by us, run by tinderboxes
- mochitests? mozmill?
- JSON test file format (avoid custom format + parser), possibly even JS
- moar end-to-end tests
- tests the hell out of bookmark dupe detection
- test all obscure bookmark types (queries, etc.)
- need to test errors and edge cases as well
- run on fennec
1. Deauthorize device.
- Questions: "curious if deauthorize implies full client list with management ui and/or jpake 'enter code from device', and/or, 'where is my device, anyways'"
1. Better error reporting and logging.
- The sync log situation is just bullshit right now. Philipp has some patches, but still… moar!
- Automatically report issues from the browser (maybe make it opt-in) with anonymized logs and stack traces.
A bunch of new engines and extensions
(Bugs: http://cow.org/r/83s)
1. Sync favicons. (Marina?)
2. Sync add-ons. (Already done?!)
3. Sync web apps.
4. Sync local storage.
5. Automatic profiling.
- are we JITing everywhere?
- main thread blocking (UI responsiveness)
- memory leaks