|
|
|||||
The power of informal contractsThe "Principle of Informal Contracts" allows anyone to create useful mashups.Before releasing elmcity as an open source project, it had to be reviewed by a team of Microsoft lawyers. They found no patentable invention in the code and gave me the green light. Which is funny in a way, because I'm sure I couldn't ever create a patentable software invention. I'm just not that talented as a programmer. Writing code, for me, is mainly a way to explore ideas and illustrate possibilities. In this case, it's the idea that we can manage data in a social way by participating in networks of syndicated feeds. And it's the possibility that a lone developer, modestly capable but empowered by languages, libraries, tools, and cloud services, can bring that idea to life. What is innovative about my project, I claim, is the network-oriented way of thinking and acting that it embodies and promotes. The approach is based on a set of principles that we have yet to fully articulate, never mind teach along with the proverbial three R's. Almost everybody learns the rules of reading, writing, and arithmetic. But almost nobody learns the laws that govern the structure and flow of information in networks, and that enable us to make effective use of those networks. We don't need software innovation to solve the problem that the elmcity project addresses. Our perpetual inability to merge personal and public calendar data can't be blamed on a lack of standard, broadly-available software and services. We have all the stuff we need, and have had for quite some time, and it all interoperates pretty well. But we haven't internalized why, and how, to use it in a network-oriented way. One of the crucial ingredients is something that I'll call the Principle of Informal Contracts. Here's an example from the early blogosphere: RSS auto-discovery. It's the mechanism that associates the pages of a website with a corresponding feed. Back in 2002 a remarkable collaboration brought it into existence, summarized here by Mark Pilgrim who concluded:
Thanks to that consensus, it has ever since been easier to subscribe to blogs. But what about before then? The blogosphere's feed ecosystem was already bootstrapped and thriving. RSS, implemented by various feed publishers and feed readers, was the obvious enabler. But there was also an informal contract. It went something like this:
That was enough to get things started in a big way. Here's a more contemporary example: the contract that's implied by choosing a tag at the beginning of a conference. It says:
Members of a certain tribe, which you most likely belong to if you're reading this, take that contract for granted. For you, the word "camp" does not connote outdoor recreation, but rather a new kind of conference that's co-created by the organizers and by the attendees. One of the organizers' roles is to declare a tag for the conference. I've watched newcomers to the tribe encounter this practice for the first time, and then immediately adopt it. So I know the idea is catching on. But we haven't yet spelled out the underlying principle of informal contracts. And we've got to do that, because we're living in a world where networks of people and data can fruitfully use such contracts. They're easy to create if you know how and why. Here's the contract for the ecosystem of calendar feeds that I'm trying to bootstrap:
Within the project itself, there are some other contracts. Here's one:
That agreement in turn enables another. Because every action in delicious is a database query that produces an RSS feed, the acquisition of a new calendar feed by a curator sends a message on a virtual channel that can be read and reacted to. The service that reads and reacts, in this case, is FriendFeed. Here's the contract:
Like delicious, FriendFeed can support this kind of contract by empowering users to define sets of online resources and share them as feeds. With these kinds of contracts in place, interesting possibilities arise. Here's one that tickles me: The elmcity service doesn't yet need to implement its own system of user registration. If my approach to decentralized event curation takes off, I might someday need to create a registration system and require curators to use it. But for now it's trivial for me to bookmark a delicious account and tag it as one that the service regards as authoritative for a hub. Likewise, the folks who provide the feeds trusted by curators and aggregated by hubs don't yet have to register with the service. For now, providers need only make feeds known to curators, one way or another. And curators who deem those feeds worthy of inclusion need only bookmark and tag them. These are the kinds of workflows that can arise when informal contracts are in place. They're cheap to create and easy to evolve. Here's a final example. If you're a curator who adds a new feed to a hub, you naturally want to see your new events merged into the hub as soon as possible. Normally you'd have to wait until the next aggregation cycle, which might be as long as eight hours. So I had to come up with a way for a curator to send an authenticated message to the service, telling it to short-circuit the wait and gather new events right away. My first thought was that here, finally, was the reason I'd need to build my own user registration system and require curators to use it. My second thought was, hang on, I already trust their delicious accounts, why not use those accounts as channels for authenticated messages? That's doable, but I didn't find a graceful way to do it. My third thought was: What about Twitter? Hence the Twitter contract:
In a companion how-to article on O'Reilly Answers, I show how this piece of the service works. What's relevant here is that the code doesn't have to do very much. That's because the informal contract makes it possible to reuse Twitter in a novel way, as a channel for authenticated messages. In a world full of services like delicious, FriendFeed, and Twitter -- services that can route feeds of data based on user-defined vocabularies -- you don't have to be a programmer to create useful mashups. You just have to understand, and find ways to apply, the Principle of Informal Contracts. Related: |
|||||
|
|||||