| UI or UX | UI + UX - Lightweight emoji feedback control anchored to an existing message, comment, issue, document selection, or work item | UI + UX - Object-attached comment composer and comment list with authorship, replies, state, permissions, and moderation | UI + UX - Inline recipient reference with autocomplete, stable recipient identity, notification routing, access checks, and broad-audience safeguards | UI + UX - Topic-centered conversation with parent post, reply branches, unread participation state, and thread-level controls | UI + UX - Catch-up stream of recent collaboration and work events with actor, verb, object, type, destination, and triage controls | UI + UX - Durable user-opened notification history and action drawer | UI + 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. |