| UI or UX | UI + UX - Per-object opt-in control for future updates from a thread, page, channel, space, repository, saved view, or topic | UI + UX - Durable user-opened notification history and action drawer | UI + UX - Inline recipient reference with autocomplete, stable recipient identity, notification routing, access checks, and broad-audience safeguards | UI + UX - Catch-up stream of recent collaboration and work events with actor, verb, object, type, destination, and triage controls | UI + UX - Topic-centered conversation with parent post, reply branches, unread participation state, and thread-level controls | UI + UX - Dedicated user or app configuration management surface | UI + UX - Persisted named presentation state for a data workspace | UI + UX - Object-attached comment composer and comment list with authorship, replies, state, permissions, and moderation |
| UI guidance | Render follow or subscribe as a stateful control attached to the specific object being watched, with current state, target scope, delivery destination, event types, auto-follow reason when present, and an unfollow path. | 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. | Show mention suggestions at the caret with names, handles, avatars, teams, channels, availability or scope hints, permission warnings, and keyboard-highlight state; distinguish exact matches, ambiguous display names, unavailable recipients, and broad-audience mentions. | 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. | 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 settings management as a durable configuration surface with a clear Settings or Preferences entry point, grouped categories, current values, setting descriptions, ownership or scope labels, dependencies, save or immediate-apply behavior, status feedback, search or section navigation for larger sets, and reset or restore defaults where appropriate. | Render saved views as named, selectable workspace presentations with visible owner or visibility, active state, saved layout mode, columns or fields, grouping, sort, filters, and last-updated metadata. | 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 | Make subscriptions reversible, scoped, and explainable so users understand why updates arrive, where they arrive, which events are included, and how to stop or narrow noisy delivery. | 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 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. | Protect attention by grouping low-value repetition, preserving meaningful actors and destinations, distinguishing mention/reply/reaction/app/reminder/project-change types, and routing audit evidence, long-form content, and live status elsewhere. | 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 settings management when users need to review and change persistent app, account, workspace, notification, privacy, display, integration, or system behavior outside the immediate task flow. | Use saved view when users need to return to a complete operational presentation of a changing dataset rather than rebuilding columns, layout, grouping, filters, and sort every session. | Preserve comment drafts, anchors, authorship, notifications, edit history, deletion outcomes, and resolved or hidden states so conversation context remains trustworthy across reloads, permissions, moderation, and return visits. |
| Good UI | A thread header shows Following, explains replies will appear in the followed-threads list and Activity feed, and offers Unfollow replies from the same menu. | 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 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 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 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 notification settings page groups channels, quiet hours, digest frequency, and workspace scope; each row shows current value, effect, dependency, and whether changes save immediately. | A support queue has saved views named My urgent tickets, Team backlog, and SLA breach risk, each showing columns, sort, filters, owner, and private or team visibility before users apply it. | 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 repository is watched automatically after one comment, but the user only finds the unsubscribe action three screens deep in global settings. | Users ignore the center because duplicate low-value messages inflate the badge. | Mention chips break when copied, pasted, edited, localized, or rendered in plain-text fallbacks. | A feed includes every presence heartbeat and typing event, making mentions and failed deployment events impossible to find. | Nested replies are indented until they become unreadable on mobile and the answer is hidden below collapsed context. | Users change the wrong scope because local, account, workspace, and organization settings look identical. | A saved view list mixes saved filters, saved searches, static exports, bookmarks, and recent pages under one generic Saved label. | A Notes textarea sits under a record and calls itself comments even though every user overwrites the same field. |
| Good UX | A user follows a support thread before leaving for a meeting, receives only new replies in the promised destination, then unfollows when the incident closes. | Opening the notification drawer clears the new-notification badge while unread items remain available for later triage. | 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 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. | 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 turns off weekly digest emails, sees the setting save immediately, keeps urgent security emails enabled, and understands the workspace-level override. | A manager opens SLA breach risk, sees the board layout, grouped Status lanes, five saved columns, and current result count, then changes density and saves a private copy instead of overwriting the team view. | 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 followed saved view keeps sending links after the user loses access to the underlying project. | Users mark all notifications read and lose the only record of an export job they still need to download. | A mention notification opens the record homepage rather than the exact comment sentence, forcing the recipient to search for why they were pulled in. | A user clears a notification in Activity but the notification center badge stays out of sync and the same event reappears as unread. | A moderator marks an answer but the thread summary still shows unanswered because answer state is stored only on the visible reply card. | A user changes a privacy setting thinking it affects only one project, but the value applies to the whole account. | A user changes one column while reviewing a team queue and accidentally updates the shared default for everyone. | A user writes a long comment, loses network connection, and the draft disappears when the page reloads. |
| Best fit | Users need future updates from a specific object, thread, channel, space, repository, topic, saved view, or query. | Users receive multiple asynchronous updates across objects, jobs, collaborators, approvals, or reminders. | Composed content needs to target people or groups inline. | Users need to catch up on recent collaboration, app, repository, channel, project, meeting, reminder, or task activity. | A topic or parent message can generate multiple reply branches that users need to follow over time. | Users need to inspect and change persistent app, account, workspace, privacy, notification, display, integration, device, or system behavior. | Users repeatedly return to a specific presentation of a changing data set. | Feedback must preserve author, timestamp, reply, resolution, assignment, or moderation context. |
| Avoid when | Another person needs to notify the user immediately inside authored content. | The product has only occasional current-action feedback that a toast or inline status can handle. | The user is selecting a structured owner, assignee, approver, or recipient field outside written content. | The surface is primarily content consumption, media browsing, or article-like stream reading. | The surface is a broad feed of independent posts or activity cards. | The task is a one-time transaction, submission, setup wizard, or onboarding flow. | Only one current-session filter or sort choice needs to be changed. | The user is simply entering a long answer into a form field. |
| Required state | Following state. | Closed entry-point state with zero, new-unseen, and unread-but-seen counts. | Highlighted suggestion, keyboard-selected suggestion, mouse or touch-selected suggestion, and inserted mention token. | Default feed state with actor, verb, object, timestamp, source, type icon, preview, scope, and destination for each activity item. | Parent topic or parent message with author, timestamp, title or body, category, and reply count. | Settings overview with categories and current values | Saved view list with active, private, team, shared, pinned, default, owner, last-updated, and result-count states. | Empty comment list and first-comment composer. |
| Accessibility burden | Give the control an accessible name that includes target type, target name, current follow state, and destination when space allows. | Announce new notification arrival with status semantics when appropriate, but avoid interrupting users repeatedly for low-priority center items. | Expose the suggestion list as a labelled popup tied to the editor and announce the number of available mention targets. | Give the activity feed a heading and expose the current filter, layout, and unread or cleared state in text. | Label the thread region with the parent topic or message title. | Use headings, section labels, fieldsets, and persistent labels so settings groups and controls have clear programmatic names. | Use labelled controls for view name, visibility, layout, columns, grouping, filters, sort, density, and sharing settings. | Label the comments region with the object or selection being discussed. |
| Common misuse | Hiding Unfollow in global notification settings only. | Treating the badge count, unread count, and total notification count as one number. | Treating a mention suggestion list as a generic people picker and ignoring caret position, inline serialization, and notification side effects. | Dumping every low-level system event, presence update, typing event, or cursor movement into the feed. | Flattening every reply into a chronological stream and losing who replied to whom. | Using settings as a dumping ground for unrelated navigation, billing, help, profile setup, onboarding, or destructive account actions. | Saving current rows instead of presentation settings and dynamic criteria. | Using one shared Notes field as a comment system and overwriting prior contributors. |