Building a conversation platform — Part 6

Unification of forces

Mikolaj Szabó
5 min readAug 27, 2016

In the previous part we concluded that a post is a graph of blocks, and it follows that a whole conversation is a graph of blocks too, without consisting of any post nodes, and consisting only of arrows of type reply, link, and the one yet unnamed, connecting the blocks of a post together. Or in other words, that the unit or the atom of content is the block, not the post.

So what is the post really? Is the post really just a path or a subgraph, in a conversation graph, designated by that specific type of arrow, which represents the relationship between paragraphs of an article? What is the relationship between paragraphs of an article? Is the relationship between paragraphs of an article different from the relationship between an article and a comment from the same author? Or is that relationship different from the relationship between an article and a subsequent update, appended to it?

We can actually think of the post as a series of replies from the same user. We could call a thread of blocks a post, up until there is a block in it from a different user, which block then constitutes a comment. If we connect every individual block in our graph to its author with an author arrow, as we did earlier with post nodes, we don’t need any other mechanism — dedicated node or arrow type — to denote posts in the conversation graph. This way those unnamed arrows are just regular reply arrows. A post is a subgraph in the conversation graph, in which every block is authored by the same user.

Figure 1: blocks from the same author form a post

On Figure 1, while every block is connected by reply arrows, we can still recover our original article (including the sidebar), if we only consider those blocks, that are authored by User 1.

What about link arrows? Are those really different from reply arrows? Certainly, an article linked from another article is not a reply to that, and it might have even been posted earlier in time, than the linking article. But reply is just a label. We can find a better label, under which these arrow types can actually be unified.

As we discussed in the previous part, reading is linear, because it happens in time, and time is linear. While content is branching, and actually forms a graph, we can only consume it linearly. And what these arrows in the graph — of type reply or link — really point to from a particular block, is the next block in time. Every block linked from another block is potentially the next one to read. These arrows represent the succession of content, as we read. When the content branches, the reader has a choice.

Is a comment the next piece of content that could be consumed after the article it comments? Is a forum reply similarly something that could come after a post? Is the relationship between two subsequent chat messages such that we could describe it with the term next? The answer to these is obviously yes. Is an article linked from a paragraph of another article something that could come right after the linking paragraph? Is a block annotation something that we could rather read, instead of the next paragraph of the article? I believe the answer to these questions is also yes.

If we rename both our reply and link arrows to next, and thus have a single type of arrows that connect blocks in a conversation, we achieve something that we could call the unification of forces. I think this is an as important insight as the one earlier, in Part 4, that comments are regular posts.

The relationship between paragraphs of an article, or between post and its comments, or between related content, is fundamentally the same. This relationship between these components represents the fact, that one piece of content comes after another, from the reader’s point of view.

Mind that these arrows don’t represent the actual chronology of the creation of content. An older block might easily succeed a newer one, from a reader’s point of view.

Every aspect that distinguishes these concepts from each other (replies from links, and from belonging to the same article), can be equally expressed through and by the blocks’ relationships to their authors or audience or any other node in the graph. So labeling them differently is redundant. While unifying them reveals deeper connections.

Let’s review what our graph model looks like now, after all this:

node types:
user, block, group
arrow types:
user --[author]--> block
block --[next]--> block
group --[member]--> user
user --[follow]--> group
group --[audience]--> block
block types:
text, heading, image, video ...

In this model, the act of replying something (like in a forum, or like a comment, or a block annotation) is just appending a block to another block. And by appending, we mean connecting a block to another, with a next arrow, which points to the replying block. Linking related content is also just appending. As we will see later, prepending has a meaning too. And quoting could be illustrated by:

Figure 2: quoting from another article

In a way, we have dissolved the post in the conversation. It turned out to be an unnecessary concept. We can derive it if we need to, as a subgraph of blocks, that are all connected to the same user with author arrows. But what I think is a more interesting concept, is a particular path or route in the conversation graph, that a reader can take. We could call this a story. We can think of this model as not only the graph model of conversation, but also as the graph model of collaborative storytelling.

Before we explore this aspect of our model, we first need to look at some obvious extensions, to enrich it with basic and common platform features, in the next part.

--

--