All in the <head> – Ponderings and code by Drew McLellan –

Don't Import, Subscribe

Feed Icon One of my favourite features of web-aware calendaring software (be that desktop or online) is the ability to subscribe to a calendar. Rather than importing the data once, the calendar software will store the URI of the calendar data and periodically update from the source. The frequency of the updates can be set based on the subject matter, usually anything from minutes to months.

Rather than just importing the data once and forgetting it, the subscription pattern embraces the fact that your source of data knows more about that data than you do (else you’d not be importing it), and that the data may change at some point. If your data source is more a more authoritative source for that data than you, why presume that they wouldn’t always have more up-to-date information than you?

Subscription is already commonplace with calendars and of course RSS feeds, where it’s been proven to work well and to be easily understandable. So the next step is to apply it to all other areas where data importing is common. Social network portability (which according to Tantek is all my fault) is a an area where subscription should be applied liberally. If a user points to a source of authority for their social networking information, an app should presume to subscribe to that source, giving the user the option to opt-out of subscription and make it a one-time import if they choose. (For example, if I were to decide to stop using Twitter and migrate to Pownce, an import would be useful, but Pownce would become more authoritative from that point forward as I began to use it primarily.)

This is a really important Web 2.0ish concept for web app developers and users alike to understand and embrace. For an app to truly be native to a web of data it needs to understand that it does not become a peer in the authority of that data simply by importing it. The data source is still more authoritative, and will likely continue to be so. Therefore, it’s not enough to import and forget. You have to keep checking back. Consider everything to be a feed.