Building a conversation platform — Part 7

User actions

In the previous part we finally arrived at a graph model of conversations and collaborative storytelling, that we will not tweak any further, but only extend. What’s nice about this model is that it can be extended very easily, without affecting any already existing features, simply by adding new node or new arrow types to it. And we do need to extend it, to include some of the basic and common features of conversation platforms.

Before going any further, I must note here, that while the actual justification for flipping the direction of reply arrows was that we eventually renamed them to next, and obviously these need to point from the previous to the next block, the justification for flipping member arrows was, in Part 4, that it was “cleaner” to have only one type of arrow between two given types of nodes, in the same direction. Our model will eventually lose this property, as we are extending it with new arrow types. Also, the membership-relationship can be equally well expressed by member arrows pointing to or away from users, and a model with member arrows in one direction is isomorphic to a model with member arrows in the other direction, if it is otherwise identical. I will stick to the convention of these arrows pointing from groups to users, but it is worth pointing out, that this doesn’t really matter.

The most obviously missing platform features from our model are user actions. User actions, as the name suggests, are things involving a user, thus we are going to represent them by arrows, pointing from user nodes to some other node.

The simplest and most prominent user action is like. Likes, which may also be labeled as stars, bookmarks, favorites, recommends, upvotes etc., depending on the platform, are signals of engagement with the content. We can easily represent them with arrows pointing from users to blocks. We may even need several different such labels at the same time. The role and utilization of these signals may vary widely: the label bookmark implies some kind of “save for later”-like functionality, while the label star may rather suggest that the relationship represents a rating. Arrows labeled as likes are, most of the time, used as factors in calculating popularity or recommendations of content.

Arrow types similar to the above can be envisaged between users and users, or users and groups too. These can represent ratings, or express interest. In a way, the follow arrow between users and groups falls exactly into this category of user actions. The negation of follow, i.e. users blocking or ignoring other users or groups is another example, and as such, an arrow type, pointing from users to users or groups, and possibly labeled as ignore.

An even more trivial user action is view, that represents a block impression. This is an arrow between a user node and a block node, and is not necessarily unique, in contrast to likes. In many cases we only want to capture the fact that a user has already seen a particular block (so that, for example, it is not recommended to her anymore), in which case view can be unique. But it also makes perfect sense to distinguish between all impressions of a block by the same user, so we may have multiple view arrows between the same user and block.

Figure 1

User action is a tricky concept, as anything can be seen as one. After all, everything is a result of an action of a user. Starting a conversation, replying (i.e. appending a block to another), joining a group — these are all actions of users. A possible implementation of our model is a platform that translates every click of every user into events, which all invoke some mutation of the graph, i.e. new arrows or new nodes. Are all these events user actions?

In our discussion, this term has a narrower, more definite meaning, denoting things that can be represented by arrows that originate from user nodes. Although not every such arrow is a user action, as for example authorship is not. This may sound somewhat arbitrary, but still it feels like a category.

Sharing may also seem like a user action, but, as it turns out, it is not one. We will see why, in the next part.