Building a conversation platform — Part 4

Unified graph model of online conversations

Mikolaj Szabó
5 min readAug 25, 2016

In the previous part we augmented our basic graph models with concepts like the blog, the chatroom etc. And we observed how these various groups of users serve the same purpose in all these models, namely to enable assigning audience to conversation trees.

Let’s summarize what graphs we have so far, so then we can unify these, and describe a single one, that works for all forms of conversation, like instant messaging, blog commenting, forums.

The graph model of forums is:

node types: 
user, post
arrow types:
user --[author]--> post
post --[reply]--> post

The graph model of a Twitter-like messaging platform is:

node types:
user, tweet
arrow types:
user --[author]--> tweet
tweet --[reply]--> tweet
user --[follow]--> user

The graph model of instant messaging is:

node types:
user, message, chatroom
arrow types:
user --[author]--> message
message --[follow]--> message
user --[member]--> room
room --[audience]--> message

And finally the graph model of blog commenting is:

node types:
user, post, comment, blog
arrow types:
user --[author]--> post
user --[author]--> comment
comment --[comment]--> post
user --[member]--> blog
user --[follow]--> blog
blog --[audience]--> post

The major differences are in terminology, and more importantly, in the social features of the various conversation platforms. But we saw in the previous part how the user relationships of chats could be modeled by those of blogs, by unifying the member and follow arrows. We also pointed out how the Twitter-model could be emulated by the blog model, if we replaced the blog nodes, and their incoming member and follow arrow-combinations, with direct user-to-user follow arrows. Also, the forum model is embedded in all the others, therefore can be emulated by each. So the blog commenting model seems to be the generic graph model of conversations.

Well, except for that one fly in the ointment, that is the comment node and arrow type. It seems fairly straightforward and trivial to us by now, that those are unnecessary, and could be removed, but as a matter of fact, this insight is very rare. It is such an important insight, that I cannot emphasize it enough:

Comments are regular posts, just like the original post

And thus, as each post may or may not have a “parent” post, posts form tree structures. The original post, in a way, is taken off its pedestal, and is not special in any other way, than just being the root, the conversation starter. In this way a blog post with its comments is no different from a forum topic. In this unity, what the concept of blogs as groups adds to a forum platform, is community and identity.

The resulting graph model of blog commenting, that replaces the one above is:

node types:
user, post, blog
arrow types:
user --[author]--> post
post --[reply]--> post
user --[member]--> blog
user --[follow]--> blog
blog --[audience]--> post

And this way, the above blog commenting model is also the unified, generic conversation model, that we have been looking for, to apply to all kinds of platforms, like blogs, forums, chats, Twitter etc.

We need to, of course, switch to a more generic terminology, not specific to any particular form of conversation, so let’s rename the blog to group. Also we are going to flip some arrows, namely reply and member. Although this may seem to affect how elegant our model is, as the arrows don’t anymore form sentences in a neat fashion, by arrows pointing from the subject, like “user is author of post”, “post replies post”, “user is member of blog”, “user follows blog”, “blog is audience of post”. But apart from this one point, it doesn’t really matter, as flipping the arrows is an isomorphic change. And there’s also value, in terms of expressiveness, in having only one arrow type in the same direction between some node type A and some node type B. There’s an even better justification for flipping reply arrows, as we’ll see later. With all this, our model becomes:

node types:
user, post, group
arrow types:
user --[author]--> post
post --[reply]--> post
group --[member]--> user
user --[follow]--> group
group --[audience]--> post

So this way a forum is just a generic conversation platform, with one single group that every user is a member of, and that every user follows, and that is the audience of each conversation.

Figure 1: forums modeled by the generic conversation model

An instant messaging platform is just a degenerate case of a generic conversation platform, where every post (called message) within a group (called chatroom) replies (follows) the last one, and therefore there are no branching threads. Also, where there is a follow arrow for every member arrow, and where replies are restricted by memberships (meaning a post can only be replied by users who are also members of the same group).

Figure 2: chatrooms modeled by the generic conversation model

Twitter is just a generic conversation platform, that (apart from only allowing 140 character long posts, called tweets) assigns one group to every user, which the user is uniquely and alone a member of, and which represents the audience of all the users’ posts (tweets), through its followers.

Figure 3: Twitter modeled by the generic conversation model

A traditional blog commenting platform is a generic conversation platform, where groups are called blogs, and posts that are replying another post are called comments, and comments have no replies.

Figure 4: blog commenting modeled by the generic conversation model

Now that we have a generic model of conversations, that can be applied to instant messaging, blogs etc., we need to take a closer look at its constituents. Specifically, we need to see if the chosen unit of content, the post, is also a concept scalable enough to cover all these use cases. We will explore this in the next part.

--

--