There are two use cases for Synapse Discussion Forum:
- A discussion forum for each project where collaborators can share thoughts and comments.
- A Synapse Q&A forum where Synapse technical support answers general questions about Synapse.
In this document, we show the design of the first use case and state the differences for the second use case.
Permissions
Any user with project's Can Read permission will be able to read comments.
Any user with project's Can Comment permission will be able to create a new thread and comments on other's thread. These users can edit their comments, add and remove tags from threads they created.
Any project Admin, in addition to above actions, can also remove threads, comments, and tags in the project. They can also pin a thread so that it appears before other threads.
UI Mockup
The images below were generated using Moqus, and can be viewed here: https://app.moqups.com/Kimyen0816/AnHoFYQWUL/view/page/a56a2940b
Empty Discussion - Can Read
Users who have Read permission to a project will see this if the project does not have any discussion yet.
Empty Discussion - Can Comment
Users with Comment permission will be able to create a new topic or a new question in the discussion tab. The difference between a topic and a Q&A is that users can vote for an answer in a Q&A. Answers will be ordered by number of votes.
Discussion - Can Read
Users with Read permission will see something similar to this. They are not able to write comments yet but can request Comment permission.
When they click on the expand icon on the bottom right of the topic, they can read more about the comments.
Discussion - Can Comment
This is Kim's view. Since she is the owner of the topic, she will be able to edit her comment.
For users with Comment permission, the expand view will give them the choice to write their comment to the topic they are viewing.
Discussion - Admin View
Admin can enter Admin Mode. In the Admin Mode, the admin can choose topic(s) and comment(s) to perform actions to.
For a topic, the admin can add/remove tags, delete topic, and pin/unpin topic. When a topic is pinned, it appears on top of the discussion board. When it is unpinned, it will be order chronologically.
For a comment, the admin can delete it.
When the admin finishes moderating, he/she can exit the Admin Mode to see how the discussion look with the changes that he/she made.
Topic with answers - Can Read
For a topic, comments will be paginated and appear in the order they are written. The UI shows the last few comments. Users can click Load more to read older comments.
Q&A with answers - Can Read
For Q&A, comments will be paginated and ordered by number of votes it received.
Users with Read permission cannot vote. Users with Comment permission can vote.
New Topic Editor
When user clicks on New Topic or New Q&A, this widget will pop up.
To add a tag to the topic, author can simply write #<tag> in the comment body, or use the look up tool to look for existing tags in the project.
Users can press Enter or click Add to add a tag from the look up tool to their topic.
New Comment
Comments & Suggestions
- Provide an Order By button so that users can view Q&A answers either by the votes or by chronological order.
- Users should be able to vote on all topics given the above feature.
- Users should be able to choose certain topics to follow. Have three panels with paginated content:
- Topics pinned by Admin
- Topics I follow
- Others (order chronologically)
- Allow private discussions (like how it works with entity).
- Use notation @username, and notify users when their names are mentioned.
- In File/Table tab view, if a file or a table has a discussion, give users the link to go to the discussion about that file/table.
- As soon as the the feature is out, people will want to search for the content of the comment.
- Use case: allowing users to vote on a row in a table.
Suggestion: provide a way for user to upload a table, then auto-generate a topic about that table, each row in the table is a vote-able comment. - How many layers of nesting comments is good?
- The advantage of having only one layer of comments/ response is that everything in a topic must be relevant to the topic.
- The advantage of having two layer of comments is that user can comment on a specific comment.
- Answers by admin should be highlighted and appears first.
...
Use cases
Asking for input on a shared analysis project
Alice is a post doc on a scientific project spread across several different labs, with different people working on different sub tasks and with different types of expertise. Alice is new to her lab and doesn’t know everyone on the project personally very well yet, but she needs some people she works with on the project to check her work (in this case, people with access to a private project). She has an issue on which she would like input from others on the team, but her concerns are fairly open-ended. Some examples: she needs help interpreting an analysis result, or understanding some of the project data, or getting ideas on how to approach her work. Alice would like to write up a summary of her ideas, referencing multiple resources (files, tables, etc) within the project. She would like a way for everyone on her team to be notified of her ideas, and she wants to see when they respond with any comments of their own. Other team members read through the discussion, which which Entity X appears in the discussion. They would benefit from a quick way to find entity X and take a look at it.
Discussion is active on this topic for a period of time, and Alice picks a path for her analysis. However, there are a few other ideas by other team members that aren’t immediately followed up, and it’s useful for the project team to have a way to not completely lose the record of these ideas.
Example of interactions among team members in a project: User A, B and C are working on a report. The process of generating the report takes several steps. First, A generates some files. B then take a look at the files to find any abnormal data. This first two steps may be repeated several times. During this period, there are multiple emails sent between A, B, and also include C. Once the files look good, C will run a script to generate the report. C does not want to receive emails from A and B while they are working. However, C want to be able to go back and read them later. A and B may talk about the same thing in different emails. It is hard to keep track of all the emails and to look for something that was mentioned in an email. It would be easier to have a place where all of the discussions go to.
Discovery of relevant discussion within a project
Alice is using a set of files that are generated by Bob and Cheryl. Most of the results were expected. However, one of the file from the set generated unexpected result. Alice wants to better understand what happened with that file, but doesn’t know exactly what she’s looking for. She would like to know if there is a discussion from Bob and Cheryl about that file. If there are multiple discussions about the file, Alice would be interested to see all of them.
Bob is browsing through some data files recently uploaded to the project. He is exploring an idea for an analysis, but he would benefit from knowing if any of these files had been mentioned in a discussion by others on the team.
Managing a research team
Bob is a senior researcher managing a distributed team of people working on a project. He wants to monitor the conversations occurring among team members, but he’s busy and can’t track every detail. He also trusts the team to keep working for periods of time without his direct input (days or even weeks; he travels a lot). He needs help occasionally scanning though recent conversations in the project. He doesn’t have a specific thing he’s looking for, but he’s looking for problems where he thinks he could help, and he also wants to get a sense of how the various people on the team are interacting with each other so he can get ahead of any problems, and track overall progress. Occasionally, people may call him out by name in a discussion, and it’s more important that he notices the conversations in which this occurs.
While Bob is reading a discussion, he sees a question posed by Cheryl that he thinks Alice would have a more detailed answer to. Bob gives his thoughts, mentioning Alice as someone who has more info (she’s not been previously active in this discussion on this topic). Everyone involved would benefit if she became aware she was mentioned.
Asking Synapse Support Question
Cheryl has heard about Synapse from co-workers and would like to use acquire some data from a project recently shared with her. She is comfortable working in Python and follows the instructions to create a new account and install the Python client. However, every time she starts the client they get an error X. Her co-worker doesn’t understand the error; the client works fine for him so she doesn’t know anyone to personally ask for help. Cheryl needs a way to ask for help from the Synapse support team, and simply wants an answer to her question as quickly as possible (assuming it’s correct).
In this scenario, Brian wants a way to monitor all the support questions that don’t have answers so he can find the right person at Sage to answer (in this case, Chris). However, he’d be delighted if some enterprising scientist such as Larsson jumped in with an answer. He’d even be pleased if some other Synapse user unknown to us (Don) jumped in and answered the question, but in this case he’d want to give it a little more scrutiny. It’s also helpful for Brian to see if Cheryl responds with whether a fix works.
It’s important to Cheryl that she can tell when an answer is coming from someone “officially in charge” (in this case a Sage employee), vs. from a random community member like Don. It’s also important for Sage to be able to convey a professional image, and make sure “official” support answers are clearly marked. If Don does a great job answering, Brian wants to publicly thank him. However, if Don goes on a drunken misdirected rant, Brian would like to remove that post and replace it with better advice for Cheryl.
Later on, Eileen has the same problem as Cheryl. It’s a benefit to everyone if she can find the answer given to Cheryl by herself. Eileen looks for help by going straight to Google, it’s what she always does regardless of what problem she has. In this case, the query is something like “Synapse Error X”. She needs to see the result on the first page of Google search results, or she assumes it doesn’t exist. When she finds a result, it’s also helpful for her to see Cheryl respond with confirmation that Larsson’s fix actually worked.
Mike would like to occasionally scan through the support questions to make sure questions for help aren’t sitting open too long, and to monitor the quality of support given by other folks at Sage.
Supporting a Challenge
Frank is responsible for launching a new challenge. He writes up a wiki page that describes the new challenge and explains how to participate. He advertises the Synapse project page as the place to learn more about the challenge (e.g. on DREAM website, in press releases, etc.) George wants to participate in the challenge but has a question. He might have a question about the data, the scoring process, the schedule, etc. As in the discussion use case, some of these questions might mention specific wikis, files, tables, etc, but some of them don’t are more conceptual.
This use case has many of the same dynamics as the Synapse support use case. The main difference is that in this case, the questions are scoped by the project, and it is the project organizers who care about managing and making sure questions are answered. This is a group of people already defined as a Synapse team, because they already have a unique set of resources they need to manage. It is this organizing team that provides the “official” response, and is tasked with managing the challenge support forum. Their needs though are similar to that of the overall Synapse support team - they want to ensure quick and professional responses to questions.
Supporting a Community with a broad data resource
Similar to the Challenge use case. A mix of Sage and external researchers are charged with creating a well-curated and accessible project that organizes a large, generally useful scientific data set. There is a broader consortium of people with early access to the data that may have questions for the organizers. Later on the data will be made public and anyone with a Synapse account may want to access the data and ask a question.
Once the data is made public, Lara would like to present the dataset and solicit ideas about how to analyze the data to the community. She would like to gauge some level of community interest in different approaches, and encourage people to add new ideas ideas. She is the manager of the project, and feels soliciting this discussion and making it visible in the broader community is of high value in trying to encourage people to exchange ideas.
Building a Community
Lucy and her friends who are expert in machine learning form a team to participate in a Dream Challenge. They would love to find a biologist to collaborate. They need a way to connect with other participants in the challenge.
Tom has a set of data he wants to public and have people take a look at. However, no one is interested to know his data because no one know who Tom is. Tom would love for people to find his impressive work, but does not want to copy it from his linkedin profile to his post. He would love for his work to be shown in every posts somehow so that it gives more credits to what he says.
Approach
Each project has a Forum. A Forum has one or many Moderators, and many Threads. A Thread is created by a user (Author) and has many Replies. A Reply is created by a user (Author).
In the second phase, we could add new features so that a user could help the community by marking a Thread is helpful, and by marking a Reply is helpful or unhelpful.
Mockups
Phase 1
Summary View
Paginated Threads
Thread View
Paginated Replies
Author View
Moderator View
Removed (Hidden) Replies
New Thread
New Reply
Models
API
Action | Intended User | URI | Method | Request Parameters | Request Body | Response Body | Notification Sent to (P2) | |
1 | Get Forum Metadata for a Project | authorized user | /forum/{projectId} | GET | Forum | |||
2 | Get Threads of a Forum | authorized user | /forum/{forumId}/threads | GET | order, limit, offset | PaginatedThreads | ||
3 | Create a Thread | authorized user | /thread | POST | CreateThread | Thread | ||
4 | Get a Thread by its ID | authorized user | /thread/{threadId} | GET | Thread | |||
5 | Create a Reply | authorized user | /reply | POST | CreateReply | Reply | Thread’s Author | |
6 | Get a Reply by its ID | authorized user | /reply/{replyId} | GET | Reply | |||
7 | Remove a Thread | Moderator | /thread/{threadId} | DELETE | ||||
8 | Remove a Reply | Moderator | /reply/{replyId} | DELETE | ||||
9 | Get Replies for a Thread | authorized user | /thread/{threadId}/replies | GET | order, limit, offset | PaginatedReplies | ||
10 | Update a Thread’s Message | Author | /thread/{threadId}/message | PUT | String | |||
11 | Update a Reply’s Message | Author | /reply/{replyId}/message | PUT | String | |||
12 | Update a Thread's title | Author | /thread/{threadId}/title | PUT | String | |||
13 | Restore a deleted thread | Moderator | /thread/{threadId}/restore | PUT | ||||
14 | Retrieve a paginated list of moderator for a given forum | authorized user | /forum/{forumId}/moderators | GET | limit, offset | PaginatedModerators |
Future Potential Extensions
Search
Look for all discussions about an entity - DONE
Search for content
Tag / Category
Notification
Moderator gets notification when new thread is created - DONE
Author gets notification when someone responds to their post - DONE
Following - DONE
Vote (up and down) on responses
Flag a thread/ response as inappropriate
Mark a thread as helpful
Be able to see that there are discussions on a file / table* - DONE
Be able to link to a thread - DONE
- Moderator would be able to close a thread and link to another thread