Back to compare picker

Reactions vs Comments vs Mentions vs Threaded discussion vs Activity feed vs Notification center vs Presence

Choose reactions when the user needs to acknowledge, agree, vote lightly, express sentiment, or trigger a known emoji-based workflow without adding a full written reply.

Decision dimensions

Dimension ReactionsCommentsMentionsThreaded discussionActivity feedNotification centerPresence
UI or UX UI + UX - Lightweight emoji feedback control anchored to an existing message, comment, issue, document selection, or work itemUI + UX - Object-attached comment composer and comment list with authorship, replies, state, permissions, and moderationUI + UX - Inline recipient reference with autocomplete, stable recipient identity, notification routing, access checks, and broad-audience safeguardsUI + UX - Topic-centered conversation with parent post, reply branches, unread participation state, and thread-level controlsUI + UX - Catch-up stream of recent collaboration and work events with actor, verb, object, type, destination, and triage controlsUI + UX - Durable user-opened notification history and action drawerUI + UX - Person or group availability signal with status label, recency, source, privacy boundary, and action-aware affordances
UI guidance Render reactions as compact chips or controls attached to a specific item, showing emoji or reaction name, count, the current user's selected state, add-reaction access, remove behavior, and a way to inspect who reacted.Render comments as anchored contributions with author identity, timestamp, body, optional attachment or selection context, edited state, reply target, and state labels such as open, resolved, hidden, deleted, or assigned.Render mentions as inline tokens or highlighted text that preserve a stable recipient identity, display name, avatar or team marker, recipient type, and selected state without breaking surrounding editable text.Render a threaded discussion around a visible parent topic or parent message, with reply rows that preserve author, timestamp, reply target, branch depth, unread or new state, and thread-scoped actions.Render activity feed as a typed event stream where each item names the actor or source app, action, object, workspace or channel, timestamp, preview, event type, read or cleared state when supported, and a stable destination for follow-up.Provide a persistent notification entry point, usually a bell or inbox control, with a count that represents new unseen notifications rather than every unread item forever.Render presence as a labelled availability signal near the person, team, object, or conversation it describes; pair color, shape, text, timestamp, and source so users can distinguish active, away, busy, do not disturb, offline, unknown, viewing, and recently active states.
UX guidance Use reactions when users need a fast, low-friction way to acknowledge, support, celebrate, flag lightly, or express sentiment without creating a new reply.Use comments when users need to discuss, question, annotate, review, or leave follow-up notes on a specific object, selection, file line, record, document, or task without changing the primary content directly.Use mentions when a user needs to call attention to a person, team, channel, role, or group from inside a message, comment, task, document, issue, or thread while keeping the reference embedded in the authored content.Use threaded discussion when users need to follow, contribute to, or resolve a conversation that branches from one topic, question, channel message, or post and must keep replies understandable over time.Use activity feed when users need to catch up on recent work or collaboration activity across channels, projects, repositories, tasks, apps, or people without opening every underlying object.Use a notification center when users receive enough asynchronous system or collaboration updates that they need a durable place to review, triage, and act later.Use presence when users need to decide whether to interrupt, wait, route work, join a session, assign follow-up, or understand who is currently viewing or recently active in a shared space.
Good UI A message row shows 👍 6, 👀 2, and Add reaction; the user's 👍 is highlighted, clicking it removes their reaction, and opening the count reveals who reacted.A document margin comment shows the selected paragraph, author, timestamp, body text, Reply, Resolve, Assign, and Copy link actions with the composer focused on that selection.A comment composer opens a suggestion list after @, shows people and teams with avatars, handles, access labels, and keyboard focus, then inserts a mention chip for Priya Rao.A support topic shows the original question, three top-level replies, one expanded reply branch, an accepted answer badge, unread branch marker, and thread-level Follow and Mute controls.A team activity feed shows Priya mentioned you in #refunds, Build bot marked release-128 failed, Maya reacted to your handoff note, and Rahul merged PR #742, each with icon, timestamp, preview, type filter, and Open action.A bell opens a drawer with Unread and All filters, showing comment mentions, approval requests, export results, and background-job failures in newest-first order.A reviewer row shows Priya as Busy in a meeting until 14:30, disables Call, keeps Message available, and offers Notify when available.
Bad UI A thumbs-up chip is styled like a formal Approve button and commits a release without approver route, audit, or version context.A Notes textarea sits under a record and calls itself comments even though every user overwrites the same field.The editor highlights every @word as a mention even when it is plain text and has no recipient identity.All replies are rendered as identical flat messages with no indication of which parent or branch they answer.A page titled Activity shows Update happened cards with no actor, object, type, timestamp, or destination.A red badge says 42 forever because opening the drawer, reading items, and viewing related work never update the count.A green dot appears next to every name with no label, timestamp, or meaning.
Good UX A teammate adds 👀 to show they are looking at a message, sees their reaction highlighted, removes it after replying, and the activity feed groups the reaction event with other low-priority reactions.A reviewer comments on a selected line, adds an action item for Dana, receives a reply, resolves the comment, and can reopen it from the resolved filter.A user mentions @Dana in a private incident note, sees that Dana lacks access, chooses Invite and mention, and the resulting notification opens the exact note.A user opens a notification to a specific unread reply, sees the parent post and branch context, replies, marks the answer, and mutes future replies after resolution.A user filters Activity to mentions and replies, answers one thread inline, clears low-value reactions, saves a custom view for VIPs, and opens a deployment failure in the source app.Opening the notification drawer clears the new-notification badge while unread items remain available for later triage.A user sees that Dana is in Do not disturb, sends a message without a banner interruption, and schedules a reminder to follow up when Dana is available.
Bad UX A user adds ✅ as casual acknowledgement, but an automation silently closes the task.A user writes a long comment, loses network connection, and the draft disappears when the page reloads.A user mentions someone in a private channel, the person is not notified, and the sender receives no warning or recovery path.A user clicks New reply and lands at the top of a long topic with no highlight, branch context, or last-read position.A user clears a notification in Activity but the notification center badge stays out of sync and the same event reappears as unread.A payment failure that blocks the current checkout is only stored in the notification center and never appears in the task.A manager treats Away as an attendance record even though it came from device inactivity and privacy-limited activity data.
Best fit Users need quick, lightweight feedback on an existing message, comment, issue, document selection, or work item.Users need object-attached discussion without changing the primary object content directly.Composed content needs to target people or groups inline.A topic or parent message can generate multiple reply branches that users need to follow over time.Users need to catch up on recent collaboration, app, repository, channel, project, meeting, reminder, or task activity.Users receive multiple asynchronous updates across objects, jobs, collaborators, approvals, or reminders.Users need to understand current or recent availability before messaging, calling, assigning, routing, or joining.
Avoid when The response needs written reasoning, evidence, or a reply thread.The user is simply entering a long answer into a form field.The user is selecting a structured owner, assignee, approver, or recipient field outside written content.The feedback is a simple object-attached comment with no navigable topic discussion.The surface is primarily content consumption, media browsing, or article-like stream reading.The product has only occasional current-action feedback that a toast or inline status can handle.The product needs a durable audit trail or compliance record.
Required state No reactions state.Empty comment list and first-comment composer.Empty composer, @ trigger, loading suggestions, no results, and filtered suggestions.Parent topic or parent message with author, timestamp, title or body, category, and reply count.Default feed state with actor, verb, object, timestamp, source, type icon, preview, scope, and destination for each activity item.Closed entry-point state with zero, new-unseen, and unread-but-seen counts.Available, active, away, busy, in a meeting, in a call, presenting, focusing, do not disturb, out of office, offline, unknown, and hidden states where supported.
Accessibility burden Give each reaction chip an accessible name that includes emoji meaning, count, selected state, and target item context.Label the comments region with the object or selection being discussed.Expose the suggestion list as a labelled popup tied to the editor and announce the number of available mention targets.Label the thread region with the parent topic or message title.Give the activity feed a heading and expose the current filter, layout, and unread or cleared state in text.Give the entry-point control an accessible name that includes new or unread count without relying only on a red dot.Expose presence state as text, such as Dana Lee, Busy in a meeting until 14:30, not just a colored dot.
Common misuse Using reactions as formal approvals without approver eligibility, audit trail, or version context.Using one shared Notes field as a comment system and overwriting prior contributors.Parsing @words after submit without requiring the sender to choose a real recipient.Flattening every reply into a chronological stream and losing who replied to whom.Using activity feed as an audit log without evidence fields, export, or retention guarantees.Treating the badge count, unread count, and total notification count as one number.Using only color dots without text labels, source, or recency.

Reactions

UI or UX
UI + UX - Lightweight emoji feedback control anchored to an existing message, comment, issue, document selection, or work item
UI guidance
Render reactions as compact chips or controls attached to a specific item, showing emoji or reaction name, count, the current user's selected state, add-reaction access, remove behavior, and a way to inspect who reacted.
UX guidance
Use reactions when users need a fast, low-friction way to acknowledge, support, celebrate, flag lightly, or express sentiment without creating a new reply.
Good UI
A message row shows 👍 6, 👀 2, and Add reaction; the user's 👍 is highlighted, clicking it removes their reaction, and opening the count reveals who reacted.
Bad UI
A thumbs-up chip is styled like a formal Approve button and commits a release without approver route, audit, or version context.
Good UX
A teammate adds 👀 to show they are looking at a message, sees their reaction highlighted, removes it after replying, and the activity feed groups the reaction event with other low-priority reactions.
Bad UX
A user adds ✅ as casual acknowledgement, but an automation silently closes the task.
Best fit
Users need quick, lightweight feedback on an existing message, comment, issue, document selection, or work item.
Avoid when
The response needs written reasoning, evidence, or a reply thread.
Required state
No reactions state.
Accessibility burden
Give each reaction chip an accessible name that includes emoji meaning, count, selected state, and target item context.
Common misuse
Using reactions as formal approvals without approver eligibility, audit trail, or version context.

Comments

UI or UX
UI + UX - Object-attached comment composer and comment list with authorship, replies, state, permissions, and moderation
UI guidance
Render comments as anchored contributions with author identity, timestamp, body, optional attachment or selection context, edited state, reply target, and state labels such as open, resolved, hidden, deleted, or assigned.
UX guidance
Use comments when users need to discuss, question, annotate, review, or leave follow-up notes on a specific object, selection, file line, record, document, or task without changing the primary content directly.
Good UI
A document margin comment shows the selected paragraph, author, timestamp, body text, Reply, Resolve, Assign, and Copy link actions with the composer focused on that selection.
Bad UI
A Notes textarea sits under a record and calls itself comments even though every user overwrites the same field.
Good UX
A reviewer comments on a selected line, adds an action item for Dana, receives a reply, resolves the comment, and can reopen it from the resolved filter.
Bad UX
A user writes a long comment, loses network connection, and the draft disappears when the page reloads.
Best fit
Users need object-attached discussion without changing the primary object content directly.
Avoid when
The user is simply entering a long answer into a form field.
Required state
Empty comment list and first-comment composer.
Accessibility burden
Label the comments region with the object or selection being discussed.
Common misuse
Using one shared Notes field as a comment system and overwriting prior contributors.

Mentions

UI or UX
UI + UX - Inline recipient reference with autocomplete, stable recipient identity, notification routing, access checks, and broad-audience safeguards
UI guidance
Render mentions as inline tokens or highlighted text that preserve a stable recipient identity, display name, avatar or team marker, recipient type, and selected state without breaking surrounding editable text.
UX guidance
Use mentions when a user needs to call attention to a person, team, channel, role, or group from inside a message, comment, task, document, issue, or thread while keeping the reference embedded in the authored content.
Good UI
A comment composer opens a suggestion list after @, shows people and teams with avatars, handles, access labels, and keyboard focus, then inserts a mention chip for Priya Rao.
Bad UI
The editor highlights every @word as a mention even when it is plain text and has no recipient identity.
Good UX
A user mentions @Dana in a private incident note, sees that Dana lacks access, chooses Invite and mention, and the resulting notification opens the exact note.
Bad UX
A user mentions someone in a private channel, the person is not notified, and the sender receives no warning or recovery path.
Best fit
Composed content needs to target people or groups inline.
Avoid when
The user is selecting a structured owner, assignee, approver, or recipient field outside written content.
Required state
Empty composer, @ trigger, loading suggestions, no results, and filtered suggestions.
Accessibility burden
Expose the suggestion list as a labelled popup tied to the editor and announce the number of available mention targets.
Common misuse
Parsing @words after submit without requiring the sender to choose a real recipient.

Threaded discussion

UI or UX
UI + UX - Topic-centered conversation with parent post, reply branches, unread participation state, and thread-level controls
UI guidance
Render a threaded discussion around a visible parent topic or parent message, with reply rows that preserve author, timestamp, reply target, branch depth, unread or new state, and thread-scoped actions.
UX guidance
Use threaded discussion when users need to follow, contribute to, or resolve a conversation that branches from one topic, question, channel message, or post and must keep replies understandable over time.
Good UI
A support topic shows the original question, three top-level replies, one expanded reply branch, an accepted answer badge, unread branch marker, and thread-level Follow and Mute controls.
Bad UI
All replies are rendered as identical flat messages with no indication of which parent or branch they answer.
Good UX
A user opens a notification to a specific unread reply, sees the parent post and branch context, replies, marks the answer, and mutes future replies after resolution.
Bad UX
A user clicks New reply and lands at the top of a long topic with no highlight, branch context, or last-read position.
Best fit
A topic or parent message can generate multiple reply branches that users need to follow over time.
Avoid when
The feedback is a simple object-attached comment with no navigable topic discussion.
Required state
Parent topic or parent message with author, timestamp, title or body, category, and reply count.
Accessibility burden
Label the thread region with the parent topic or message title.
Common misuse
Flattening every reply into a chronological stream and losing who replied to whom.

Activity feed

UI or UX
UI + UX - Catch-up stream of recent collaboration and work events with actor, verb, object, type, destination, and triage controls
UI guidance
Render activity feed as a typed event stream where each item names the actor or source app, action, object, workspace or channel, timestamp, preview, event type, read or cleared state when supported, and a stable destination for follow-up.
UX guidance
Use activity feed when users need to catch up on recent work or collaboration activity across channels, projects, repositories, tasks, apps, or people without opening every underlying object.
Good UI
A team activity feed shows Priya mentioned you in #refunds, Build bot marked release-128 failed, Maya reacted to your handoff note, and Rahul merged PR #742, each with icon, timestamp, preview, type filter, and Open action.
Bad UI
A page titled Activity shows Update happened cards with no actor, object, type, timestamp, or destination.
Good UX
A user filters Activity to mentions and replies, answers one thread inline, clears low-value reactions, saves a custom view for VIPs, and opens a deployment failure in the source app.
Bad UX
A user clears a notification in Activity but the notification center badge stays out of sync and the same event reappears as unread.
Best fit
Users need to catch up on recent collaboration, app, repository, channel, project, meeting, reminder, or task activity.
Avoid when
The surface is primarily content consumption, media browsing, or article-like stream reading.
Required state
Default feed state with actor, verb, object, timestamp, source, type icon, preview, scope, and destination for each activity item.
Accessibility burden
Give the activity feed a heading and expose the current filter, layout, and unread or cleared state in text.
Common misuse
Using activity feed as an audit log without evidence fields, export, or retention guarantees.

Notification center

UI or UX
UI + UX - Durable user-opened notification history and action drawer
UI guidance
Provide a persistent notification entry point, usually a bell or inbox control, with a count that represents new unseen notifications rather than every unread item forever.
UX guidance
Use a notification center when users receive enough asynchronous system or collaboration updates that they need a durable place to review, triage, and act later.
Good UI
A bell opens a drawer with Unread and All filters, showing comment mentions, approval requests, export results, and background-job failures in newest-first order.
Bad UI
A red badge says 42 forever because opening the drawer, reading items, and viewing related work never update the count.
Good UX
Opening the notification drawer clears the new-notification badge while unread items remain available for later triage.
Bad UX
A payment failure that blocks the current checkout is only stored in the notification center and never appears in the task.
Best fit
Users receive multiple asynchronous updates across objects, jobs, collaborators, approvals, or reminders.
Avoid when
The product has only occasional current-action feedback that a toast or inline status can handle.
Required state
Closed entry-point state with zero, new-unseen, and unread-but-seen counts.
Accessibility burden
Give the entry-point control an accessible name that includes new or unread count without relying only on a red dot.
Common misuse
Treating the badge count, unread count, and total notification count as one number.

Presence

UI or UX
UI + UX - Person or group availability signal with status label, recency, source, privacy boundary, and action-aware affordances
UI guidance
Render presence as a labelled availability signal near the person, team, object, or conversation it describes; pair color, shape, text, timestamp, and source so users can distinguish active, away, busy, do not disturb, offline, unknown, viewing, and recently active states.
UX guidance
Use presence when users need to decide whether to interrupt, wait, route work, join a session, assign follow-up, or understand who is currently viewing or recently active in a shared space.
Good UI
A reviewer row shows Priya as Busy in a meeting until 14:30, disables Call, keeps Message available, and offers Notify when available.
Bad UI
A green dot appears next to every name with no label, timestamp, or meaning.
Good UX
A user sees that Dana is in Do not disturb, sends a message without a banner interruption, and schedules a reminder to follow up when Dana is available.
Bad UX
A manager treats Away as an attendance record even though it came from device inactivity and privacy-limited activity data.
Best fit
Users need to understand current or recent availability before messaging, calling, assigning, routing, or joining.
Avoid when
The product needs a durable audit trail or compliance record.
Required state
Available, active, away, busy, in a meeting, in a call, presenting, focusing, do not disturb, out of office, offline, unknown, and hidden states where supported.
Accessibility burden
Expose presence state as text, such as Dana Lee, Busy in a meeting until 14:30, not just a colored dot.
Common misuse
Using only color dots without text labels, source, or recency.
Decision rules
  • Choose reactions when the user needs to acknowledge, agree, vote lightly, express sentiment, or trigger a known emoji-based workflow without adding a full written reply.
  • Choose comments when the user needs text, evidence, a question, a decision rationale, an anchor, moderation, edits, deletion, or a reply thread.
  • Choose mentions when the user needs to notify or route attention to a specific person, team, channel, or audience; a reaction should not be treated as a reliable mention.
  • Choose threaded discussion when multiple replies and branches need durable conversation structure; reactions can summarize sentiment but cannot carry the discussion.
  • Choose activity feed when users need to catch up on many reaction, mention, reply, and app events across work objects; the feed should group or summarize reactions instead of becoming the reaction control.
  • Choose notification center when reaction events create durable unseen or unread items with badge, cleanup, and preference semantics.
  • Use presence for current availability and co-viewing state; do not use reaction counts as proof that a person is available or actively reading.
  • Reaction UI must show the emoji, count, user's own selected state, who reacted, add/remove behavior, picker access, custom or restricted emoji policy, grouped overflow counts, and unavailable, not-reactable, or already-reacted states.
  • If an emoji reaction triggers workflow automation, the UI must disclose the trigger, frequency, scope, and who can trigger it before users rely on it.
  • Avoid using reactions for binding approval, assignment, audit evidence, accessibility-only status, or sensitive feedback unless the product supplies the stronger lifecycle and disclosure those tasks require.
Inspect live examples
Failure modes
  • A thumbs-up reaction is treated as approval even though approver eligibility, version, audit, and rejection paths are missing.
  • A reaction count hides who reacted, so users cannot distinguish one person's repeated reaction from broad agreement.
  • A reaction picker is only available on hover and keyboard or touch users cannot add or remove reactions.
  • An emoji reaction triggers a workflow without warning, creating tickets or escalations from casual feedback.
  • Custom emoji or skin tone choices leak sensitive identity or are not represented in accessible names.
  • The activity feed floods with every reaction instead of grouping low-value reaction activity behind overflow or summary rows.
  • A not-reactable item simply hides reaction controls, leaving users unable to distinguish policy restrictions from a broken or loading state.