Threaded vs flat: Discourse's way of handling responses is genius, but I have one small suggestion


(Thomas Becker) #1

What I like most about Discourse is how it resolves the old flat-vs threaded controversy (see also Jeff Atwood’s blog entry Web Discussions: Flat by Design on the subject). Discourse uses a flat display, because a threaded display is a tree, and trees cannot be displayed on a screen in a “usable” manner. On the other hand, Discourse allows replies to earlier posts. It makes it very convenient to see the immediate parent of a reply, and even to navigate up the path of parents in case of replies to replies. That UI design is absolutely phantastic. I have talked to a number of died-in-the-wool thread-view lovers, and they had to grudgingly admit that Discourse is good. There is just one thing that they all asked for, and it is exactly the thing that came to my mind when I first looked at Discourse. When looking at a specific post, it would be nice if one could filter the entire topic so that it only displays:

  1. This post itself,
  2. the path of replies from the top of the topic to this post, and
  3. the subtree of replies and replies-to-replies below this post

A mathematician would call this the path to this node and the subtree rooted at this node. I understand that this may be confusing/complicated/cluttering for a good UI. What I can pretty much guarantee though is that it would win over even the most die-hard of the thread-view aficionados. Just a thought.


Query about Discourse features
Linked replies showing up again so you have to read them twice - can this be addressed?
Intra-topic link to post doesn't let you go back
(Jeff Atwood) #2

I honestly can’t even understand what you mean by this.

Can you reply with a diagram or mockup of how you think it should work?


(Valts) #3

I think what he means is similar to what you already have for posters. That is, currently under the original post there are buttons for all the posters. When you click a poster, suddenly you see only the posts made by a certain person. Click it again and you see all posts in the thread.

In the same vein you could add a “show conversation tree” button to each post (there’s plenty of space at the bottom, next to the “Like” button). When you click that button, you again get a filtered view of the thread. But this time it’s not filtered by a person, but rather by reply-branches. To put that in a diagram (pardon my ascii art):

Full view of thread (each line represents one post):

1: Alex
2: Bethy in reply to (1)
3: Alex in reply to (2)
4: Bethy in reply to (3)
5: Carl in reply to (1)
6: Alex in reply to (5)
7: Bethy in reply to (5)
8: Carl in reply to (7)
9: Alex in reply to (8)
10: Dan in reply to (1)

Then you click The Button at the post number (7) and you see:

1: Alex
5: Carl in reply to (1)
7: Bethy in reply to (5)
8: Carl in reply to (7)
9: Alex in reply to (8)

In other words, you see all the posts that the clicked post (7) replied to (directly or indirectly) and all the posts that replied to the clicked post (directly or indirectly). Basically, you filter out a single conversation from the entire thread of jumbled conversations.

I think this is an idea worth exploring.


(Mason Wheeler) #4

Yeah, that’s definitely a good idea. It would greatly improve the user experience and make things a lot easier for users who are used to the threaded conversation “feel”.


(Thomas Becker) #5

Yes, that is exactly what I meant. Thank you so much for your lucid explanation. In particular, thanks for providing the proper terminology: what this is about is showing a particular conversation.


(Kris) #6

Seems a bit complex in terms of UI - couldn’t someone just click the already-existing Replies button on the bottom left and just follow through a discussion that way?

The annoying thing about threaded conversations is that converstations start happening inside of other conversations, and you can become entirely separated from the part of the discussion you were originally following…

I may be misunderstanding the suggestion, but it just sounds like putting threads inside of relevant portions of a flat line of discussion - a forum inside of a forum?


(Mason Wheeler) #7

[quote=“awesomerobot, post:6, topic:4053”]
The annoying thing about threaded conversations is that converstations start happening inside of other conversations, and you can become entirely separated from the part of the discussion you were originally following…[/quote]

Whether or not you find it annoying, that’s the behavior that most forum-users from around the Web expect, and if there’s no way to emulate that on top of Discourse’s flat model, it’s going to annoy a whole lot of people. The idea described by TheBear and Vix here is a really good way to handle it, IMO.


(Alexander) #8

Could, but it’s a lot of clicking, and you need to keep track of which of the replies is the path to the end.


(Valts) #9

Exactly. This is precisely what happens in real life, in all the forums, all the time. And in a linear model it can get really confusing. It’s the problem we’re trying to solve. And another button labeled “Conversation”, next to the “Replies” button, could work in this regard.

Also, if the conversation seriously diverges (mostly the side-conversations die out after a few posts), this button could help the moderators to split the topic more easily.


(Kris) #10

Wait, what?

Sure, I’d be interested to see the idea in action because I’m somewhat unsure of its value - but since when have most forms been threaded? In my experience the opposite is true.


(Benjol) #11

The discussions are threaded, even if the forums aren’t. This is a reality of human ‘discourse’; the challenge is to find a way to manage and represent this ‘threading’ in a screen-and-brain friendly fashion.


(Kris) #12

Would the button take you to another page with that thread in flat form, or would it expand inline? Also would it be duplicating the functionality of the “in reply to” and " replies" buttons to the point where those would become superfluous to most users?

I’m just having a hard time imagining how the feature might handle volume, say in a thread that’s a few dozen posts in… Seems like it would need to cut off at one point or have it’s own everscroll? Then you’re back to a similar issue a flat conversation causes…


(Valts) #13

Have you tried the buttons that filter by members?


(Dane Weber) #14

Let’s see if I can make this clear. Here’s the starting thread (somewhat expanded from @Vilx ):

Full view of thread (each line represents one post):

1: Alex
2: Bethy in reply to (1)
3: Alex in reply to (2)
4: Bethy in reply to (3)
5: Carl in reply to (1)
6: Alex in reply to (5)
7: Bethy in reply to (5)
8: Carl in reply to (7)
9: Alex in reply to (8)
10: Dan in reply to (1)
11: Dan in reply to (7)
12: Bethy in reply to (10)
13: Dan in reply to (8)

If you then click the currently existing icons that @Vilx pointed out in his screenshot, you currently see a filtered set of posts (in this case Bethy):

1: Alex
2: Bethy in reply to (1)
4: Bethy in reply to (3)
7: Bethy in reply to (5)
12: Bethy in reply to (10)

Using the exact same filtering functionality, @TheBear 's proposal is to have a button that when clicked for (7), you see the following:

1: Alex
5: Carl in reply to (1)
7: Bethy in reply to (5)
8: Carl in reply to (7)
9: Alex in reply to (8)
11: Dan in reply to (7)
13: Dan in reply to (8)

There’s no threading or expansion. Just filtering. Essentially, for a given post, you want to see its blood ancestors and blood descendants and none of the cousins, nieces, or uncles.


(Thomas Becker) #16

That’s exactly right. The way you extended @Vilx’s original example makes the demonstration even better. Thanks!


(Kris) #17

Ah alright, that makes a lot more sense to me — thanks for the better explanation! All the talk of threading was completely throwing me off.


(vzmind) #18

I definitely support such option so secondary conversations inside the main conversation could be easily followed/split/moderated. If it’s just filtering, a new button should be enough to handle that (based on buttons you mentionned @Vilx ).

All post are already on the page, with ancestor ID and all. In a way, rebuilding the tree is technically possible.

Any idea how heavy it’s to implement ?


(Pablo Antonio) #19

I think I’m myself a “thread-view aficionado” that still doesn’t completely like Discourse’s approach. If I get it right, I think what you’re all suggesting is interesting: Given a post, show me its context (where the discussion came from and where it got after the post).

The “Conversation” button might help but, as it happens with the “in reply to …” and “N Replies” buttons right now, they duplicate posts in the page. I don’t like that. Also, the path from the root to the clicked post can be shown flat, but what about the tree that has the clicked post as root? How do you display it?

It would be nice to hear @codinghorror’s opinion, now that an example for the idea has been provided.


(Jeff Atwood) #20

I still don’t understand the text-based mockup examples above, I suspect because I find threading very difficult to understand and follow in general. I dislike browsing Hacker News and Reddit for this reason, as well as all the other ones outlined here.

Perhaps if someone could produce a visual mockup?


(Pablo Antonio) #21

I don’t have time right now to create a mockup, but I can provide a description of a mockup if that’s worth something.

Imagine you click the “Conversation” button in @daneweber’s last post in this topic. If I understood properly, a pictorial representation of the idea would be to make a box appear above the post, much like the one that appears when you click “in reply to …” on any post, but this one would show all the thread of posts linked by reply-to’s from the first post in the thread (the original poster) to the one @daneweber replied to specifically; in this case, just the topic initiator since he didn’t reply to any specific post.

Beneath the post, another box would appear, much like the one that appears when you click “N Replies” on any post, but this one would show, in addition to the direct replies, all the replies to those replies, and so on. In this case it would be just @TheBear’s, @awesomerobot and my reply. If someone had replied to any of these three posts, it would appear in the box too.

Although I don’t completely buy the idea yet, I think it’s interesting. I think the main problem with things right now is that if conversation in a topic diverges to two different sub-topics, for example, the flat model will show you posts talking about one sub-topic and posts talking about the other mixed. It’s like the flat model assumes everybody is pretty much talking about the same sub-topic and can’t diverge. I don’t know, maybe my head is too damaged by years of reading tree-like discussions in mailing lists and the web.