Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feasiblity discussion: The community message history problem #65

Open
jimstir opened this issue Jun 13, 2024 · 0 comments
Open

Feasiblity discussion: The community message history problem #65

jimstir opened this issue Jun 13, 2024 · 0 comments

Comments

@jimstir
Copy link
Collaborator

jimstir commented Jun 13, 2024

Reference issue: vacp2p/rfc#420
Author: John-44

What is the problem we are trying to solve?

Users who are used to using a centralized group chat platform like Discord have an expectations that:

  1. new users joining a community will have access to all historical messages in that community (including messages that predate the user joining)
  2. historical messages will remain available to users after they re-install their group chat app on a new device.

Status Communities needs to offer equivalent behaviour to meet user expectations.

Why is it important that we solve this problem?

1) Chat history availability is important for productivity

Using Status’s own internal Discord as an example, it is sometimes very useful to be able to search for and/or scroll up to conversations that may have taken place 6 months or even a year or more ago, for many purposes:

  • to get up to speed on a debate that happened previously
  • to retrieve a piece of information that a user has only just realized they need but which they know is available somewhere in the past group chat history
  • to see if a claim being made about something that happened in the past actually matches up with what happened in the past
  • To follow a link to a conversation that occurred in the past, that perhaps predates the user joining the group chat.
  • Etc, etc…

2) Losing access to group chat history could feel like a catastrophic event for a user

Group chat history will frequently become an invaluable resource for the user, which leads to the problem of how can the user retain their stored group chat history when for example the user buys a new computer, or if their computer breaks or is stolen. If a user suddenly discovers that they have lost the chat history of the Status Communities they are members of when they change their computer, saying that they might get angry could be an understatement!

3) Chat history availability is important for user equality

If new users who join a Status community don’t have access to the historical discussions that took place before they joined, this will place new users at an informational disadvantage compared to users who have access to this history. In addition, whenever a user encounters a link to a previous discussion that occurred prior to them joining the community, they would encounter an error while longer standing members of the community will be able to access and read the historical thread.

Not having access to historical discussions will place newcomers to a group chat community at a significant disadvantage.

4) Chat history availability is important for community monetization

Historical group chat discussions can provide value to users, and Status will be providing communities with tools to monetize this user value. To give one example, a hypothetical Beeple Status community could exist and there could be a channel in that community where each day Beeple posts his daily art with a short commentary. New users may well be happy to pay to access this channel, in part because accessing this channel would allow them to scroll back through Beeple’s history of daily art posts. This requires all chat history in a community to be available to all users, irrespective of when a user joins.

Status communities today

In the current incarnation of Status communities, when a user first joins a Status Community a maximum of 30 days history is available, and as long as the user logs into Status once a week the user’s client will log and store the chat history in all channels of that community going forward.

If for example a user goes on holiday and doesn’t launch Status for say 2 weeks, when the user does launch Status, unless they navigate to each individual channel and manually fetch the history for each individual channel in every Status community they are a member of, there will be gaps in their community chat history. After 4 weeks have passed, these gaps become permanent and no mechanism currently exists to fetch the missing data (due to the 30 day mail server message persistence limit).

At the moment a new user who joins a community has no way of accessing any community history that is more than 30 days older than the date they joined. As time progresses, they then lose access to any community history their device has not downloaded.

Currently, if a Status Communities user needs to install Status on a new device, the new device will not contain the community chat history that the user has stored on their previous device.

Summary of problem

Not having the full chat history of a Community available to any member who joins a community at any time undermines a basic trust assumption that users will have as a result of their experience of using centralized group chat platforms. Delivering a solution to fulfill this expectation is of critical importance if Status communities is going to succeed as a product.

Requirements that any solution to this problem must fulfill

  1. This problem needs to be solved in a decentralised way. This means that any prospective solution must not require servers and/or require hosting expenditure. However it’s absolutely fine for any solution to rely on motivated members of a community (who altruistically care about the history of their community being preserved and served) running a number of Status desktop instances that are online roughly 90% of the time.

  2. This problem needs to be solved without putting a load on the Waku network that will reduce the max number of users Waku can scale to (e.g. we don't want to trade Waku network scalability to solve this problem). The history of a community can over time grow large, think multiple GBs and it might take a new community member days to download the full history of an established and active community.

  3. The solution needs to ideally be implementable in 3 to 6 months max, with 1 or 2 full time devs (as the need for this problem to be solved will become urgent soon).

  4. Users need to be able to throttle the resources consumed by their Status desktop nodes to provide provide this service. At a minimum, users should be able to:

    • Switch this functionality on for only a subset of the communities they are members
    • Throttle the max upload and download bandwidth used by this service, both per community and globally for all the communities they are members of.
    • Limit the maximum storage used by this service, both per community and globally for for all the communities they are members of.
    • In cases where the user has set a max storage limit that is less than the size of the history for a community, the community history needs to be updated in a FIFO (first in first out) manner e.g. one the max storage limit is reached, the oldest history should be deleted as new history is created in order to stay under the max limit.
    • Monitoring of the CPU and Memory used by this service (both globally and per community) would be desirable (but not essential).
    • Ideally the user should be able to throttle both memory and CPU usage as well, but this is ‘nice to have’, not essential.
  5. A strawman UI is being designed that exposes the maximum number of controls, graphs and status indications that we may wish to include. Don’t worry if some of these controls or graphs are not feasible to implement, once we have decided on an implementation direction we will go through these designs to work out what is practically possible and update the designs.

  6. After a solution to this problem has been implemented, a next step might be to build a tool that enables a community's Discord chat history and channels to be imported into Status communities. This is tracked separately in the following issue: https://github.com/status-im/status-desktop/issues/2849

  7. Community owners should have a toggle that lets them disable message serving for their community. If switched off, members of the community will not be able to switch on message history serving for that community. A community owner may wish to switch off message serving if privacy is very important for their community.

    In the future (but not in the initial implementation), we may also wish to provide community admins with a setting to limit the availability of community history for privacy reasons. Such a setting would let a community admin mark a channel as “all messages in the channel auto-delete after X days”. If switched on, all clients would automatically delete all messages in the specified channel after 30 days. This is of course a very imperfect privacy feature as there is nothing to stop users saving their only local copies of channel content via manually screenshotting or cutting and pasting or via a more sophisticated mechanism e.g. a modified Status client.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant