When Twitter changed their reply functionality, now called mentions, my initial reaction was unmentionable. After a few weeks to ponder and play with it, I still think they made a big mistake. A reply was originally a message that began with a twitter username, like this:
@zorak No, really?
Replies were public, but Twitter added a link so you could see just your replies and options to filter other people’s replies out of your friends stream. According to the Twitter blog, the community came up with the convention that Twitter later embraced and enhanced. Then Twitter added a separate API call and a “swoosh” button to their web site:
Just what I wanted! Twitter added metadata underneath so that a reply remembered which tweet it replies to. Pretty soon every Twitter client included swoosh buttons and “in reply to” links. This was a philosophical break for Twitter–whether they know it or not–because there was no way to distinguish swoosh and “@user …” via SMS. Supporting SMS creates a larger potential user base, but it drastically limits functionality. Until everybody has an iPhone, fledgling social networks like Brightkite must consider this trade-off.
The original reply syntax is still supported and continued to create confusion as Tweetie developer AteBits explained on his blog. People put multiple names in the message or put the @ in the body of the message, assuming the right people would see the replies:
@me @myself @I Remember the milk. Give @me some sugar, @baby!
Only @me sees the first tweet as a reply; nobody sees the second. Search was already catching on thanks to other community-grown initiatives like hash tags; users and client developers began using search on @user instead of the reply API to catch such grammatically incorrect tweets. Apparently this is a bad thing, or at least something Twitter discouraged, perhaps because of its impact on Twitter’s call throttling. That and other scaling problems should make for a few good dissertations; I just hope Twitter is keeping the historical record and will be willing to share it.
This brings us to mentions which are basically just searches on @user. Although it’s a good thing that Twitter learns from their community, the big mistake here was changing the functionality under the existing API calls. I agree that instantly supporting new functionality in all Twitter clients is attractive to a provider, but it can–and did–create unintended consequences. All those clients blessed with catching those malformed reply tweets were also cursed by all those side-bar mentions crowding the replies page. Twitterati like @wilw get many more mentions than direct replies, and now there’s no easy way to sort out the two.
The lesson here is that it’s safer to create new API and UI elements for new-ish functionality and let the community migrate over than to replace the guts and hope nothing breaks. As any API designer knows, developers will do all kinds of unexpected things once your API is released into the wild. The Twitter community’s active, inventive role in shaping Twitter also provides for some real “They did what?” moments. Tweaking reply functionality to support only swooshes and adding new methods for mentions would have made everybody happy.
There’s one thing I want from Twitter that they promise in the API FAQ; I want to see all replies for a given tweet. I disagree the assertion in the Twitter blog post above that people don’t want to wander into the middle of an ongoing conversation. Sometimes that’s the best way to discover new topics and interesting people. When that happens, there is a need to go back and discover the source and all its tributaries. Twitter is aware of the need, as this quote from the Twitter API Wiki FAQ shows:
How do I get all replies to a particular status?
For now, there’s not a great way to do this. We’ve heard the requests, though, and we’ll be providing a solution for it before too long.
Conversation functionality is cropping up in Twitter clients like Nambu and the soon-to-be-released Tweetie for Mac (20 April 2009). Looks like Nambu constructs conversations based on cached tweets, building little trees as it discovers reply pointers to other already-fetched tweets. This single-linked list structure makes it easy to find your immediate predecessor but difficult to walk up, across, and back down the tree.
Hmm, where have I seen this problem before? Oh yeah, version trees in Documentum. Every document remembers its immediate predecessor (i_antecedent_id) and the root of its version tree family (i_chronicle_id). A single query on i_chronicle_id returns every version of that document. That’s just what I want Twitter to do!
Twitter already has its own i_antecedent_id–with a better name I hope. So add an equivalent to i_chronicle_id and a new getAllReplies API call. I suggest topic_id since that’s what the root tweet of a tree of replies becomes. It would be nice to go back and stitch up all the previous replies-of-replies, but I would understand if the hit on the database would be too big. How many tweets are in there anyway?