| UI or UX | UI + UX - Responsibility control for assigning a work item to eligible people, teams, roles, bots, or no owner | UI + UX - Component-level list of linked task rows with names, hints, and statuses | UI + UX - Actionable queue for triaging many items that need human review | UI + UX - Routed decision workflow for requests that require authorized approval | UI + UX - Inline recipient reference with autocomplete, stable recipient identity, notification routing, access checks, and broad-audience safeguards | UI + UX - Existing-entity lookup and selected-object confirmation | UI + UX - Durable user-opened notification history and action drawer | UI + UX - Catch-up stream of recent collaboration and work events with actor, verb, object, type, destination, and triage controls | UI + UX - Durable permission administration for users, groups, roles, inherited access, effective access, and revocation |
| UI guidance | Render assignment as a responsibility field on a specific work item with current assignee, unassigned state, eligibility-filtered candidate picker, self-assign affordance, reassign and clear controls, notification outcome, and visible responsibility wording. | Render a task list as a set of row-level tasks where each row has a short task name, optional single-sentence hint, link target when startable, and status text that indicates whether the task is completed, incomplete, in progress, not started, unavailable, optional, or ready. | Render review queue as an actionable worklist with queue scope, counts, filters, sort order, row reason, owner, priority, age or SLA, status, preview context, selection, and row actions. | Render approval workflow as a routed request record with requester, object, requested action, approver eligibility, required rule, current gate, due date, decision controls, comment history, and outcome consequences. | 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 labelled lookup field with search text, scoped result list, active result, selected object chip or preview, object type, stable ID or equivalent key, secondary metadata, clear action, no-result state, loading state, and validation text. | 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 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 permission sharing as an access-management surface with the protected resource, current direct grants, inherited grants, groups, guests, anonymous or link access, role or permission level, effective access, pending changes, and revoke or save actions. |
| UX guidance | Use assignment when users need to decide who is accountable for doing or owning a work item, not merely who should be notified, mentioned, approved, invited, or granted access. | Use task list when users need to scan a known set of service tasks, understand what each task is, choose a task to start or resume, and see each task's current status. | Use review queue when a team repeatedly processes a changing set of tickets, comments, pull requests, content items, cases, requests, or records that require human inspection and action. | Use approval workflow when a submitted request cannot proceed until an authorized person, group, threshold, sequence, or external policy gate explicitly approves or rejects it. | 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 an object picker when the user must choose an existing entity whose identity matters beyond the displayed label, such as a record, person, group, account, file, team, project, or workspace. | 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 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 permission sharing when authorized owners or admins need to grant, change, audit, or revoke durable access to a space, site, repository, folder, project, board, dataset, environment, or sensitive object. |
| Good UI | An issue sidebar shows Assignee: Maya Chen, Assign to me, Change assignee, Clear, eligible teammate search, reviewer separate from assignee, and a note that the new assignee will be notified. | A task list row for Upload evidence shows the task name, a short hint, a linked row, and a Needs attention status with the unavailable reason in the row text. | A support queue shows New triage, SLA at risk, owner, customer, status, priority, age, preview text, assignment, and next actions without opening every ticket. | A production deployment request shows requester, service, environment, change summary, required reviewer group, self-review restriction, wait timer, Approve and Reject with reason controls, and a timeline of route changes. | 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 Related account field shows two Acme Retail records with account ID, region, status, and owner, then displays a selected-object preview card before saving. | 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 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 repository access page lists teams, outside collaborators, deploy keys, and direct users with Read, Triage, Write, Maintain, and Admin roles, showing that only Admin can manage access. |
| Bad UI | A comment field says @Rahul please handle this but does not create an assignment record or appear in Rahul's assigned work. | A task list uses uppercase button-like status pills and users click the status instead of the row. | A review queue shows a flat list of titles with no reason, age, owner, status, priority, or action controls. | A request page says Waiting without naming the approver, required count, due date, or escalation path. | The editor highlights every @word as a mention even when it is plain text and has no recipient identity. | A text field accepts Acme Retail as free text even though the backend needs a record ID. | A red badge says 42 forever because opening the drawer, reading items, and viewing related work never update the count. | A page titled Activity shows Update happened cards with no actor, object, type, timestamp, or destination. | A permissions page shows only individual names and Remove buttons even though group membership and parent folder inheritance still grant access. |
| Good UX | A triager changes a support ticket from unassigned to Priya, adds a handoff note, sees that Priya has access and capacity warning, and the ticket appears in Priya's assigned-to-me queue. | A user scans five task rows, sees that Financial history is incomplete, selects anywhere on that row, completes the section, and returns to find the row status changed to Completed. | A reviewer claims the oldest SLA-at-risk ticket, opens a preview, assigns it to Billing, returns to the queue with the row removed, and lands on the next oldest item. | A requester submits a deployment, sees it is waiting for Release managers, cannot self-approve, receives a change request with a required comment, edits the change summary, and resubmits to the same route. | 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 searches Acme, compares two same-named records by region and status, selects the active EMEA account, and reviews the selected account ID before saving. | Opening the notification drawer clears the new-notification badge while unread items remain available for later triage. | 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 site owner adds the Finance Reviewers group as Visitors, sees that Members can contribute content, confirms no anonymous access is enabled, and saves with an audit note. |
| Bad UX | A user assigns a confidential issue to a teammate who cannot open the project, and the UI reports success without warning. | A user returns to a list of internal section codes and cannot tell which task relates to evidence upload. | Two reviewers open the same unclaimed item, both act, and the second decision overwrites the first with no stale-row warning. | The first approver clicks Approve and the system marks the whole request approved even though policy required everyone to approve. | A user mentions someone in a private channel, the person is not notified, and the sender receives no warning or recovery path. | A user types a person name and presses Save, but no actual user account was selected. | A payment failure that blocks the current checkout is only stored in the notification center and never appears in the task. | A user clears a notification in Activity but the notification center badge stays out of sync and the same event reappears as unread. | An owner downgrades a user to Viewer, but the user keeps edit rights through a connected team and the UI never explains effective access. |
| Best fit | A user must set, change, or clear who is accountable for a work item. | A page needs to display a known set of tasks with status and links to start or resume them. | A team or individual repeatedly reviews many independently queued items. | A submitted request needs authorized approval before a deployment, purchase, access grant, publication, content change, policy exception, financial action, or workflow step can proceed. | Composed content needs to target people or groups inline. | Users assign, link, reference, invite, route, or attach an existing entity. | Users receive multiple asynchronous updates across objects, jobs, collaborators, approvals, or reminders. | Users need to catch up on recent collaboration, app, repository, channel, project, meeting, reminder, or task activity. | Owners or admins need to manage durable access to spaces, sites, repositories, projects, folders, datasets, boards, environments, or sensitive objects. |
| Avoid when | The user only needs to mention or notify someone in conversation. | Users are browsing arbitrary records rather than completing a fixed set of service tasks. | The task is a single request moving through a governed approval route. | The user only needs to check their own answers before submission. | The user is selecting a structured owner, assignee, approver, or recipient field outside written content. | Any arbitrary text is valid. | The product has only occasional current-action feedback that a toast or inline status can handle. | The surface is primarily content consumption, media browsing, or article-like stream reading. | The task is quick one-object sharing with a link or a few recipients and no broader permission model. |
| Required state | Unassigned item state. | Linked startable task row. | Queue loading and count state | Draft or submit-ready request handoff state | Empty composer, @ trigger, loading suggestions, no results, and filtered suggestions. | Empty object lookup field with label, helper text, and current search scope. | Closed entry-point state with zero, new-unseen, and unread-but-seen counts. | Default feed state with actor, verb, object, timestamp, source, type icon, preview, scope, and destination for each activity item. | Default access list state with users, groups, guests, anonymous access, roles, and effective access. |
| Accessibility burden | Label the assignment field with the current assignee, item name, and responsibility meaning. | Use list semantics for the collection of task rows and clear heading structure for grouped task lists. | Use labelled queue name, count, filters, sort, group, row status, selection, preview, and action controls. | Use labelled request summary, approver, status, due date, decision, comment, and history regions. | Expose the suggestion list as a labelled popup tied to the editor and announce the number of available mention targets. | Give the lookup field a persistent label and helper text that explains the expected object type. | Give the entry-point control an accessible name that includes new or unread count without relying only on a red dot. | Give the activity feed a heading and expose the current filter, layout, and unread or cleared state in text. | Use labelled tables or grids with column headers for principal, source, role, capability, status, and actions. |
| Common misuse | Treating a mention as an assignment. | Using task list as the whole service architecture without defining saved progress, dependencies, or final readiness elsewhere. | Using an ordinary table with no review reason, urgency, ownership, or decision actions. | Showing a generic pending message without the approver, gate, rule, or due date. | Parsing @words after submit without requiring the sender to choose a real recipient. | Treating the picker as a free text field when the system requires an existing object ID. | Treating the badge count, unread count, and total notification count as one number. | Using activity feed as an audit log without evidence fields, export, or retention guarantees. | Showing only direct users while group or inherited access remains active. |