Photo

Two-Party Threaded Chat

I’ve been thinking about how chat tools could support multiple threads of conversation naturally. Here are my current ideas. I have also written an online demo (pure client-side JavaScript). Feel free to discuss the idea in the comments on my blog post.

Motivation

The Problem

Consider this conversation:

jane: How about lunch tomorrow?
*alex is typing
jane: Oh, and did you see my latest blog post?
alex: I'd love to, how about Spaghetti Factory at 11:30?
jane: At first I wasn't sure I should post it, but then just went ahead.
jane: Splendid, 11:30 then.
alex: No, but I'll check it out in a minute.
...

Clearly there are two separate threads of conversation. The branch occurred when Jane, impatient with Alex’s slow response, started out on an tangent while he was still typing.

An Alternative

Now consider this alternative:

Jane
jane: How about lunch tomorrow?

Alex is still typing when Jane gets impatient and sends the second, unrelated message. Jane thus starts a new thread.

jane: How about lunch tomorrow?
jane: Oh, and did you see my latest blog post?

So Alex now sees:

Alex
jane: How about lunch tomorrow?
*alex: I'd love to, how about Spaghetti <-- still typing here
---
!jane: Oh, and did you see my latest blog post?

Alex now has two options:

* Continue typing, finishing the response to Jane's first message.
* Trigger a UI action to move Jane's second message up below her first so Alex can respond to both at once, effectively merging the threads again.

He chooses to continue responding to the first message. When he’s done, he sees:

Alex
jane: How about lunch tomorrow?
alex: I'd love to, how about Spaghetti Factory at 11:30?
*alex: <-- typing here
---
!jane: Oh, and did you see my latest blog post?
*alex: <-- could type here

A hotkey allows him to switch the selected thread to respond to.

Meanwhile, Jane saw:

Jane
jane: How about lunch tomorrow?
jane: Oh, and did you see my latest blog post?
*jane: <-- typing here

When Alex’s first message comes in, she sees (the transition would be smoothly animated):

Jane
jane: How about lunch tomorrow?
!alex: I'd love to, how about Spaghetti Factory at 11:30?
*jane: <-- could type here
---
jane: Oh, and did you see my latest blog post?
*jane: At first I wasn't sure I should <-- still typing here

She also chooses to finish her current message:

Jane
jane: How about lunch tomorrow?
!alex: I'd love to, how about Spaghetti Factory at 11:30?
*jane: <-- could type here
---
jane: Oh, and did you see my latest blog post?
jane: At first I wasn't sure I should post it, but then just went ahead.
*jane: <-- typing here

Then she switches to the first thread:

Jane
jane: How about lunch tomorrow?
alex: I'd love to, how about Spaghetti Factory at 11:30?
*jane: Splendid, 1 <-- typing here
---
jane: Oh, and did you see my latest blog post?
jane: At first I wasn't sure I should post it, but then just went ahead.
*jane: <-- could type here

Meanwhile, Alex has also switched and sees:

Alex
jane: How about lunch tomorrow?
alex: I'd love to, how about Spaghetti Factory at 11:30?
*alex: <-- could type here
---
jane: Oh, and did you see my latest blog post?
*alex: No, but I'll check it <-- typing here

And when Jane’s message comes in:

Alex
jane: How about lunch tomorrow?
alex: I'd love to, how about Spaghetti Factory at 11:30?
!jane: Splendid, 11:30 then.
*alex: <-- could type here
---
jane: Oh, and did you see my latest blog post?
*alex: No, but I'll check it <-- typing here

Again, he just finishes.

Which gives Jane:

Jane
jane: How about lunch tomorrow?
alex: I'd love to, how about Spaghetti Factory at 11:30?
jane: Splendid, 11:30 then.
*jane: <-- typing here
---
jane: Oh, and did you see my latest blog post?
jane: At first I wasn't sure I should post it, but then just went ahead.
!alex: No, but I'll check it out in a minute.
*jane: <-- could type here

Observations

Implementation

A key idea could be that one can always identify the message re which one is responding by the smallest sufficient prefix of the message text. This might also be rather compatible with tools that do not support the thread UI. For the latter, we might want to use a minimum prefix length so the text reads better.

jane: How about lunch tomorrow?
jane: Oh, and did you see my latest blog post?
alex: I'd love to, how about Spaghetti Factory at 11:30? (re: How...)
jane: At first I wasn't sure I should post it, but then just went ahead. (re: Oh,...)
jane: Splendid, 11:30 then. (re: I'd...)
alex: No, but I'll check it out in a minute. (re: At ...)
...

In fact, it is even possible for people to do the (re: …) stuff manually when in a plain chat tool.

Demo

You can play with some of the ideas presented here in an online demo (pure client-side JavaScript).

Feel free to discuss this idea in the comments on my blog post.