Back to compare picker

Review queue vs Approval workflow vs Saved filter vs Activity log vs Notification center vs Table vs Filter panel

Use review queue for actively triaging many items that need human review, approval workflow for routing one submitted request through decision gates, saved filter for reusable list criteria, and activity log for historical events after work changes.

Learn the decision

Match the interaction to the person's task

Use review queue for actively triaging many items that need human review, approval workflow for routing one submitted request through decision gates, saved filter for reusable list criteria, and activity log for historical events after work changes.

Review queue

Use it when: A team or individual repeatedly reviews many independently queued items.

Make this state clear: Queue loading and count state

Observe the result: 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.

Study the full pattern →

Approval workflow

Use it when: A submitted request needs authorized approval before a deployment, purchase, access grant, publication, content change, policy exception, financial action, or workflow step can proceed.

Make this state clear: Draft or submit-ready request handoff state

Observe the result: A finance approval requires both manager and controller approval; the first approval advances the sequence, a rejection stops downstream processing, and the requester sees the exact rejection reason and revise action.

Study the full pattern →

Saved filter

Use it when: Users repeatedly need the same filter criteria on a list, table, board, queue, base view, or dashboard.

Make this state clear: Saved filter list with active, private, team, global, owner, and last-updated states.

Observe the result: A benefits worker applies High priority benefits to the current appeal search; the query stays appeal while status, team, and priority filters change.

Study the full pattern →

Activity log

Use it when: Users need to inspect recorded user, admin, system, security, or integration events.

Make this state clear: Default log state with event records, result count, visible timezone, retention window, and permission scope.

Observe the result: An admin filters to failed SSO events, expands one entry, copies the event ID, exports the filtered range, and sees that records older than 180 days require a different archive.

Study the full pattern →

Notification center

Use it when: Users receive multiple asynchronous updates across objects, jobs, collaborators, approvals, or reminders.

Make this state clear: Closed entry-point state with zero, new-unseen, and unread-but-seen counts.

Observe the result: Opening the notification drawer clears the new-notification badge while unread items remain available for later triage.

Study the full pattern →

Table

Use it when: Records share comparable attributes that users need to scan in aligned columns.

Make this state clear: Default table state with caption, visible headers, row values, and result count or context.

Observe the result: A user sorts by Amount descending, filters to Pending, moves to page 2, and the table keeps its caption, active sort, active filter, row count, and selected payment context.

Study the full pattern →

Filter panel

Use it when: Users need to narrow the current search results, browse results, table, card grid, or list by multiple criteria.

Make this state clear: Applied state with active-filter count, result count, and removable applied criteria near the results.

Observe the result: A user selects Status: Open and Type: Appeal, applies the batch, lands back at the result summary, and sees 12 records with both criteria removable.

Study the full pattern →

Practice the judgment: Imagine this situation: A reviewer approves a stale row after another teammate already handled it. Write the person's goal, choose one of these patterns, and show the state that helps the person continue. Use the decision rules and source trail below to explain your choice.

Review the underlying principle →

Decision dimensions

Dimension Review queueApproval workflowSaved filterActivity logNotification centerTableFilter panel
UI or UX UI + UX - Actionable queue for triaging many items that need human reviewUI + UX - Routed decision workflow for requests that require authorized approvalUI + UX - Persisted named filter criteria applied to a list, table, board, or dashboardUI + UX - Searchable and exportable record of system, user, or administrative eventsUI + UX - Durable user-opened notification history and action drawerUI + UX - Semantic row-and-column data comparison surfaceUI + UX - Grouped filter control panel for narrowing a current result set
UI guidance 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.Place Save filter close to the active filter controls and show a criteria preview that names every stored field, operator, and value before users commit it.Render activity logs as evidence-oriented records with event time, actor, action, object, source system, scope, result, and technical context such as IP address or location when available.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 a table with a specific caption or heading, visible column headers, optional row headers, aligned values, consistent row actions, and enough spacing for scanability.Render filter categories as labelled form controls in a panel adjacent to the result set on wide layouts, with a visible result count and active-filter summary near the results.
UX guidance 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.Make the approval route understandable over time: who has the request, what decision is needed, what happens on approval or rejection, what blocks self-review, and where the requester can revise or withdraw.Use saved filter when users repeatedly apply the same filter values to a changing list and need to reuse those criteria across sessions or teams.Use activity log when users need to investigate, audit, verify, or troubleshoot actions across accounts, objects, systems, settings, or security boundaries.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 tables when aligned columns help users compare records, find exceptions, audit values, or triage work faster than opening each item.Use a filter panel to help users narrow the current list or search result set while preserving orientation, search query, sort order, pagination context, and selected values.
Good UI A moderation queue has Held, Likely spam, Reported, and Escalated tabs, row evidence, policy reason, reviewer claim state, approve/remove/escalate actions, and bulk-action preview.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 case queue exposes saved filters named High priority benefits and My review queue, each with status, team, priority, and date chips before users apply them.An organization audit log table shows timestamp, actor, action, target object, app, IP address, result, and a Details drawer with before and after fields.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 payment review table has the caption June vendor payments, headers Vendor, Status, Due date, Amount, and Action, right-aligned amounts, and row actions labelled by vendor.A desktop search page shows a left filter panel with Status, Type, and Date groups, while active chips and the result count sit above the results.
Bad UI The most urgent or oldest item is buried by default sort.A stale email approval applies to a request version that has changed.A list called Saved mixes saved filters, saved searches, recent views, pinned tabs, and browser bookmarks.An export button downloads a different date range and timezone than the on-screen filtered log.Users ignore the center because duplicate low-value messages inflate the badge.Mobile stacking removes headers and turns rows into unlabeled paragraphs.A panel mixes filter options, navigation links, sort controls, and saved views under one Filters heading.
Good UX 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 finance approval requires both manager and controller approval; the first approval advances the sequence, a rejection stops downstream processing, and the requester sees the exact rejection reason and revise action.A benefits worker applies High priority benefits to the current appeal search; the query stays appeal while status, team, and priority filters change.An admin filters to failed SSO events, expands one entry, copies the event ID, exports the filtered range, and sees that records older than 180 days require a different archive.Opening the notification drawer clears the new-notification badge while unread items remain available for later triage.A user sorts by Amount descending, filters to Pending, moves to page 2, and the table keeps its caption, active sort, active filter, row count, and selected payment context.A user selects Status: Open and Type: Appeal, applies the batch, lands back at the result summary, and sees 12 records with both criteria removable.
Bad UX A reviewer marks a pull request reviewed from an old queue row after the author pushed new commits and re-requested review.The first approver clicks Approve and the system marks the whole request approved even though policy required everyone to approve.A private preset and a team preset have the same label, causing users to overwrite the shared operational queue.A user marks a notification read and the corresponding activity evidence disappears from the only log.Users mark all notifications read and lose the only record of an export job they still need to download.Mobile stacking removes headers and turns rows into unlabeled paragraphs.Applying a filter silently resets the query, sort order, current page, and view density.
Best fit 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.Users repeatedly need the same filter criteria on a list, table, board, queue, base view, or dashboard.Users need to inspect recorded user, admin, system, security, or integration events.Users receive multiple asynchronous updates across objects, jobs, collaborators, approvals, or reminders.Records share comparable attributes that users need to scan in aligned columns.Users need to narrow the current search results, browse results, table, card grid, or list by multiple criteria.
Avoid when The task is a single request moving through a governed approval route.The user only needs to check their own answers before submission.Users only need to adjust filters for the current session.The goal is only to show a readable milestone history for one case or process.The product has only occasional current-action feedback that a toast or inline status can handle.The task depends on rich previews, imagery, or uneven metadata.The result set is small enough that scanning is faster than filtering.
Required state Queue loading and count stateDraft or submit-ready request handoff stateSaved filter list with active, private, team, global, owner, and last-updated states.Default log state with event records, result count, visible timezone, retention window, and permission scope.Closed entry-point state with zero, new-unseen, and unread-but-seen counts.Default table state with caption, visible headers, row values, and result count or context.Applied state with active-filter count, result count, and removable applied criteria near the results.
Accessibility burden 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.Use labelled controls for saved-filter name, visibility, owner, criteria fields, operators, and values.Use table or structured list semantics so actor, action, object, timestamp, result, and scope are perceivable together.Announce new notification arrival with status semantics when appropriate, but avoid interrupting users repeatedly for low-priority center items.Use native table semantics for tabular data rather than div-only rows.Use semantic form controls with fieldsets, legends, labels, and accessible names for filter categories and values.
Common misuse Treating review queue as approval workflow and hiding many-item workload controls.Treating the first approval as final when the rule requires more approvers.Treating the visible table rows as the saved object instead of storing field, operator, and value conditions.Using vague activity labels that omit actor, action, object, timestamp, or result.Treating the badge count, unread count, and total notification count as one number.Using table markup to create page columns or layout spacing.Using a filter panel as a navigation drawer that sends users to different pages instead of narrowing the current data set.

Review queue

UI or UX
UI + UX - Actionable queue for triaging many items that need human review
UI guidance
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.
UX guidance
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.
Good UI
A moderation queue has Held, Likely spam, Reported, and Escalated tabs, row evidence, policy reason, reviewer claim state, approve/remove/escalate actions, and bulk-action preview.
Bad UI
The most urgent or oldest item is buried by default sort.
Good UX
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.
Bad UX
A reviewer marks a pull request reviewed from an old queue row after the author pushed new commits and re-requested review.
Best fit
A team or individual repeatedly reviews many independently queued items.
Avoid when
The task is a single request moving through a governed approval route.
Required state
Queue loading and count state
Accessibility burden
Use labelled queue name, count, filters, sort, group, row status, selection, preview, and action controls.
Common misuse
Treating review queue as approval workflow and hiding many-item workload controls.

Approval workflow

UI or UX
UI + UX - Routed decision workflow for requests that require authorized approval
UI guidance
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.
UX guidance
Make the approval route understandable over time: who has the request, what decision is needed, what happens on approval or rejection, what blocks self-review, and where the requester can revise or withdraw.
Good UI
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.
Bad UI
A stale email approval applies to a request version that has changed.
Good UX
A finance approval requires both manager and controller approval; the first approval advances the sequence, a rejection stops downstream processing, and the requester sees the exact rejection reason and revise action.
Bad UX
The first approver clicks Approve and the system marks the whole request approved even though policy required everyone to approve.
Best fit
A submitted request needs authorized approval before a deployment, purchase, access grant, publication, content change, policy exception, financial action, or workflow step can proceed.
Avoid when
The user only needs to check their own answers before submission.
Required state
Draft or submit-ready request handoff state
Accessibility burden
Use labelled request summary, approver, status, due date, decision, comment, and history regions.
Common misuse
Treating the first approval as final when the rule requires more approvers.

Saved filter

UI or UX
UI + UX - Persisted named filter criteria applied to a list, table, board, or dashboard
UI guidance
Place Save filter close to the active filter controls and show a criteria preview that names every stored field, operator, and value before users commit it.
UX guidance
Use saved filter when users repeatedly apply the same filter values to a changing list and need to reuse those criteria across sessions or teams.
Good UI
A case queue exposes saved filters named High priority benefits and My review queue, each with status, team, priority, and date chips before users apply them.
Bad UI
A list called Saved mixes saved filters, saved searches, recent views, pinned tabs, and browser bookmarks.
Good UX
A benefits worker applies High priority benefits to the current appeal search; the query stays appeal while status, team, and priority filters change.
Bad UX
A private preset and a team preset have the same label, causing users to overwrite the shared operational queue.
Best fit
Users repeatedly need the same filter criteria on a list, table, board, queue, base view, or dashboard.
Avoid when
Users only need to adjust filters for the current session.
Required state
Saved filter list with active, private, team, global, owner, and last-updated states.
Accessibility burden
Use labelled controls for saved-filter name, visibility, owner, criteria fields, operators, and values.
Common misuse
Treating the visible table rows as the saved object instead of storing field, operator, and value conditions.

Activity log

UI or UX
UI + UX - Searchable and exportable record of system, user, or administrative events
UI guidance
Render activity logs as evidence-oriented records with event time, actor, action, object, source system, scope, result, and technical context such as IP address or location when available.
UX guidance
Use activity log when users need to investigate, audit, verify, or troubleshoot actions across accounts, objects, systems, settings, or security boundaries.
Good UI
An organization audit log table shows timestamp, actor, action, target object, app, IP address, result, and a Details drawer with before and after fields.
Bad UI
An export button downloads a different date range and timezone than the on-screen filtered log.
Good UX
An admin filters to failed SSO events, expands one entry, copies the event ID, exports the filtered range, and sees that records older than 180 days require a different archive.
Bad UX
A user marks a notification read and the corresponding activity evidence disappears from the only log.
Best fit
Users need to inspect recorded user, admin, system, security, or integration events.
Avoid when
The goal is only to show a readable milestone history for one case or process.
Required state
Default log state with event records, result count, visible timezone, retention window, and permission scope.
Accessibility burden
Use table or structured list semantics so actor, action, object, timestamp, result, and scope are perceivable together.
Common misuse
Using vague activity labels that omit actor, action, object, timestamp, or result.

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
Users ignore the center because duplicate low-value messages inflate the badge.
Good UX
Opening the notification drawer clears the new-notification badge while unread items remain available for later triage.
Bad UX
Users mark all notifications read and lose the only record of an export job they still need to download.
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
Announce new notification arrival with status semantics when appropriate, but avoid interrupting users repeatedly for low-priority center items.
Common misuse
Treating the badge count, unread count, and total notification count as one number.

Table

UI or UX
UI + UX - Semantic row-and-column data comparison surface
UI guidance
Render a table with a specific caption or heading, visible column headers, optional row headers, aligned values, consistent row actions, and enough spacing for scanability.
UX guidance
Use tables when aligned columns help users compare records, find exceptions, audit values, or triage work faster than opening each item.
Good UI
A payment review table has the caption June vendor payments, headers Vendor, Status, Due date, Amount, and Action, right-aligned amounts, and row actions labelled by vendor.
Bad UI
Mobile stacking removes headers and turns rows into unlabeled paragraphs.
Good UX
A user sorts by Amount descending, filters to Pending, moves to page 2, and the table keeps its caption, active sort, active filter, row count, and selected payment context.
Bad UX
Mobile stacking removes headers and turns rows into unlabeled paragraphs.
Best fit
Records share comparable attributes that users need to scan in aligned columns.
Avoid when
The task depends on rich previews, imagery, or uneven metadata.
Required state
Default table state with caption, visible headers, row values, and result count or context.
Accessibility burden
Use native table semantics for tabular data rather than div-only rows.
Common misuse
Using table markup to create page columns or layout spacing.

Filter panel

UI or UX
UI + UX - Grouped filter control panel for narrowing a current result set
UI guidance
Render filter categories as labelled form controls in a panel adjacent to the result set on wide layouts, with a visible result count and active-filter summary near the results.
UX guidance
Use a filter panel to help users narrow the current list or search result set while preserving orientation, search query, sort order, pagination context, and selected values.
Good UI
A desktop search page shows a left filter panel with Status, Type, and Date groups, while active chips and the result count sit above the results.
Bad UI
A panel mixes filter options, navigation links, sort controls, and saved views under one Filters heading.
Good UX
A user selects Status: Open and Type: Appeal, applies the batch, lands back at the result summary, and sees 12 records with both criteria removable.
Bad UX
Applying a filter silently resets the query, sort order, current page, and view density.
Best fit
Users need to narrow the current search results, browse results, table, card grid, or list by multiple criteria.
Avoid when
The result set is small enough that scanning is faster than filtering.
Required state
Applied state with active-filter count, result count, and removable applied criteria near the results.
Accessibility burden
Use semantic form controls with fieldsets, legends, labels, and accessible names for filter categories and values.
Common misuse
Using a filter panel as a navigation drawer that sends users to different pages instead of narrowing the current data set.
Decision rules
  • Choose review queue when reviewers repeatedly process a changing set of items that require triage, assignment, inspection, decision, bulk action, escalation, or deferral.
  • Choose approval workflow when a single submitted request has a governed route with required approvers, due dates, rejection, requested changes, delegation, and downstream blocking.
  • Choose saved filter when the user only needs reusable criteria for a list; a saved filter becomes a review queue only when it supports review-specific status, ownership, actions, counts, and workload handling.
  • Choose activity log when the product is showing what already happened; a review queue is for deciding what still needs attention.
  • Use notification center to alert a reviewer that queue work changed, but deep-link into the queue or record for the actual decision.
  • Use table or list view for passive browsing when there are no review states, ownership, SLA, claim, decision, skip, or bulk-review actions.
  • Review queue rows must expose why the item is in the queue, who owns it, age or SLA, priority, status, source, preview context, and available actions without forcing every item open.
  • Queue actions must update the row's review state and count immediately, and preserve undo, audit, or next-item behavior when the action is reversible or consequential.
  • Bulk review must require scope preview and exception handling so hidden selected items, stale rows, or mixed eligibility do not get processed incorrectly.
  • Escalated, blocked, duplicate, already-reviewed, reassigned, stale, empty, and permission-limited queue states need distinct treatment instead of one generic list message.
Inspect live examples
Failure modes
  • A queue shows only titles, so reviewers cannot tell why an item needs review or which item is most urgent.
  • A reviewer approves a stale row after another teammate already handled it.
  • Bulk approve includes hidden filtered items without a count, preview, or exception list.
  • A triage queue hides ownership and lets two reviewers work the same item at once.
  • A notification opens a generic dashboard rather than the relevant queue or item.
  • A review queue behaves like a saved filter with no review states, decision actions, empty state, or escalation path.

Saved items