Back to compare picker

Version history vs Activity log vs Timeline vs Undo vs Draft state vs Publish workflow vs Comments vs Permission denied state

Use version history when users need durable snapshots of a document, file, page, or object with current version context, previous version preview, compare, named version, and restore behavior; use activity log for investigative event evidence, timeline for readable chronological milestones, and undo for short recovery from a recent action.

Learn the decision

Match the interaction to the person's task

Use version history when users need durable snapshots of a document, file, page, or object with current version context, previous version preview, compare, named version, and restore behavior; use activity log for investigative event evidence, timeline for readable chronological milestones, and undo for short recovery from a recent action.

Version history

Use it when: Users edit documents, files, pages, design files, records, configurations, or published content over time.

Make this state clear: Default state with current version, previous version list, author, timestamp, and change summary.

Observe the result: A designer names the last approved file version, compares it against the current version, confirms restore, and sees that the restore created v43 while keeping v42 available.

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 →

Timeline

Use it when: Users need a chronological record of important events for one object, case, order, application, or process.

Make this state clear: Default timeline with heading, order label, date or phase groups, and event markers.

Observe the result: A caseworker filters the timeline to System events, sees two date groups hidden, restores all events, and the event order and current marker stay stable.

Study the full pattern →

Undo

Use it when: The action is common and mistakes are likely.

Make this state clear: Normal state before the user action.

Observe the result: Undo restores the deleted task to the list and reports Quarterly report restored.

Study the full pattern →

Draft state

Use it when: Users need to pause and resume unfinished work across sessions, devices, or routes.

Make this state clear: Published or active state with an available draft.

Observe the result: A user opens a published article that has an unpublished version, chooses Resume draft, reviews a change summary, publishes, and sees the page become visible to viewers.

Study the full pattern →

Publish workflow

Use it when: Users need to make content, products, pages, releases, site changes, campaigns, or configuration visible to an audience.

Make this state clear: Draft or edited but unpublished state

Observe the result: A content editor previews a campaign page, fixes a missing hero image, schedules publication and retirement times, sees the job queued, and later verifies the live URL and scheduled unpublish state.

Study the full pattern →

Comments

Use it when: Feedback must preserve author, timestamp, reply, resolution, assignment, or moderation context.

Make this state clear: Empty comment list and first-comment composer.

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

Study the full pattern →

Permission denied state

Use it when: A signed-in user lacks permission to view, edit, publish, export, delete, approve, share, administer, or configure a resource.

Make this state clear: Whole-object access denied state.

Observe the result: A user opens a restricted report, sees which account is signed in, requests viewer access with a reason, then sees that the request is pending with the owner.

Study the full pattern →

Practice the judgment: Imagine this situation: Retention limits or deleted author states hide why an expected previous version is unavailable. 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 Version historyActivity logTimelineUndoDraft statePublish workflowCommentsPermission denied state
UI or UX UI + UX - Durable snapshot browser for previous document, file, page, object, or configuration versionsUI + UX - Searchable and exportable record of system, user, or administrative eventsUI + UX - Bounded chronological record of past, current, or expected eventsUX - Post-action recovery behaviorUI + UX - Unpublished object version lifecycleUI + UX - Workflow for moving edited material to live, staged, scheduled, or retired stateUI + UX - Object-attached comment composer and comment list with authorship, replies, state, permissions, and moderationUI + UX - Authorization and access-boundary state
UI guidance Render version history as a durable snapshot browser with the current version, previous version list, author, timestamp, named version labels, autosaved version labels, changed summary, retention status, compare affordance, preview, and restore action.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.Render the timeline as a labelled chronological sequence where each event has a visible date or time, event title, actor or system source when known, status or type, and a short summary.Show a named recovery affordance after the completed action, such as Undo delete for a specific task, near the result or in a consistent status region.Label the current version explicitly as Draft, Unpublished changes, Published, Active, Locked, or Unavailable, and place that label near the object title, list row, editor header, and publish actions.Render publish workflow as a readiness and release surface with content identity, current status, target destination, affected pages or entries, preview, validation, permission, schedule, publish, unpublish, rollback, and live verification.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.Show the blocked object or action, current account, permission level, required role, owner, and request path when revealing that information is allowed.
UX guidance Make recovery consequences explicit: what becomes current after restore, what happens to current edits or drafts, whether a restored version creates a new version, which comments or metadata carry forward, and which older versions are hidden by retention or permissions.Use activity log when users need to investigate, audit, verify, or troubleshoot actions across accounts, objects, systems, settings, or security boundaries.Use timeline when users need to understand what happened, where they are now, and what may happen next in a case, claim, application, order, incident, or process.Let users move quickly through frequent reversible actions, then recover from mistakes after seeing the result.Use draft state when users need to pause work on an object, return later, and decide whether to publish, activate, discard, or keep editing an unpublished version.Use publish workflow when a user is moving content, product data, site changes, configuration, release notes, or campaign material from draft, staged, scheduled, or approved state to a selected live or public target.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.Use permission denied state when the system knows the user is authenticated but their role, group, share, license, policy, or approval status blocks a specific object or action.
Good UI A document side panel marks v42 as Current, lists v41, v38 named Pre-launch copy, and v35 autosaved, and opens a compare preview before Restore this version.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 benefits application timeline groups events by date and shows Application submitted, Evidence requested, Evidence received, Decision pending, and Next review, with actor, timestamp, and status marker.Deleting Quarterly report removes it from the list and shows a recovery panel saying Quarterly report deleted with an Undo task button.A knowledge article header says Draft saved today, shows the currently published title, and offers Resume draft, Compare with published, Discard draft, and Publish.A CMS publish panel shows Draft article, production site, English and French locales, validation complete, preview URL, scheduled time, affected entries, and actions to Publish now, Schedule, or Keep draft.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 report page says Quarterly revenue report requires Finance viewer access, shows the current account, names the report owner, and offers Request access and Switch account.
Bad UI The current version disappears from context while browsing older versions.An export button downloads a different date range and timezone than the on-screen filtered log.A dense audit table is squeezed into timeline cards and hides changed fields, exact actor identity, and retention proof.Undo action disappears before users can activate it.A draft label is missing from the editor, so users publish or discard the wrong version.A production publish happens when the user intended staging only.A Notes textarea sits under a record and calls itself comments even though every user overwrites the same field.A denial page says Something went wrong and shows Retry even though the user lacks a required group.
Good UX A designer names the last approved file version, compares it against the current version, confirms restore, and sees that the restore created v43 while keeping v42 available.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.A caseworker filters the timeline to System events, sees two date groups hidden, restores all events, and the event order and current marker stay stable.Undo restores the deleted task to the list and reports Quarterly report restored.A user opens a published article that has an unpublished version, chooses Resume draft, reviews a change summary, publishes, and sees the page become visible to viewers.A content editor previews a campaign page, fixes a missing hero image, schedules publication and retirement times, sees the job queued, and later verifies the live URL and scheduled unpublish state.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 opens a restricted report, sees which account is signed in, requests viewer access with a reason, then sees that the request is pending with the owner.
Bad UX The current version disappears from context while browsing older versions.A user marks a notification read and the corresponding activity evidence disappears from the only log.A user sees a future appointment marker styled like completed history and assumes the appointment already happened.The UI promises undo for a side effect that has already notified external recipients.A user discards a shared draft and unknowingly removes another editor's unpublished changes.A user clicks Save and assumes the page is live because the interface uses Save, Submit, Schedule, and Publish interchangeably.A user writes a long comment, loses network connection, and the draft disappears when the page reloads.Every workspace control is disabled after one missing permission, including safe navigation and read-only tasks.
Best fit Users edit documents, files, pages, design files, records, configurations, or published content over time.Users need to inspect recorded user, admin, system, security, or integration events.Users need a chronological record of important events for one object, case, order, application, or process.The action is common and mistakes are likely.Users need to pause and resume unfinished work across sessions, devices, or routes.Users need to make content, products, pages, releases, site changes, campaigns, or configuration visible to an audience.Feedback must preserve author, timestamp, reply, resolution, assignment, or moderation context.A signed-in user lacks permission to view, edit, publish, export, delete, approve, share, administer, or configure a resource.
Avoid when The task is only immediate recovery from one recent action.The goal is only to show a readable milestone history for one case or process.The surface is a live stream whose content keeps arriving and must preserve reader position.Recovery would restore only part of the user's lost work.The change is a small one-field edit that should be saved or canceled immediately.The user is only saving unfinished work.The user is simply entering a long answer into a form field.The operation failed for network, server, validation, data, or timeout reasons after permission was granted.
Required state Default state with current version, previous version list, author, timestamp, and change summary.Default log state with event records, result count, visible timezone, retention window, and permission scope.Default timeline with heading, order label, date or phase groups, and event markers.Normal state before the user action.Published or active state with an available draft.Draft or edited but unpublished stateEmpty comment list and first-comment composer.Whole-object access denied state.
Accessibility burden Use structured list, table, or tab semantics so version number, current status, author, timestamp, and label are read together.Use table or structured list semantics so actor, action, object, timestamp, result, and scope are perceivable together.Use semantic list or ordered-list structure with date-group headings and text event labels.Make the undo control keyboard reachable and programmatically identifiable.Use headings and status regions so screen reader users know whether they are editing a draft or viewing the active version.Use labelled controls for status, target, preview, schedule date and time, timezone, validation, publish, unpublish, rollback, and live URL.Label the comments region with the object or selection being discussed.Move focus to the permission message when it replaces page content or blocks a workflow.
Common misuse Using a timeline of milestones as a substitute for previewable or restorable versions.Using vague activity labels that omit actor, action, object, timestamp, or result.Omitting dates, actors, or event summaries and expecting icons to communicate the sequence.Restoring only part of the prior state while implying full recovery.Using Saved to mean both saved draft and published content.Using Save, Submit, Schedule, and Publish interchangeably.Using one shared Notes field as a comment system and overwriting prior contributors.Treating authorization denial as a generic retryable error.

Version history

UI or UX
UI + UX - Durable snapshot browser for previous document, file, page, object, or configuration versions
UI guidance
Render version history as a durable snapshot browser with the current version, previous version list, author, timestamp, named version labels, autosaved version labels, changed summary, retention status, compare affordance, preview, and restore action.
UX guidance
Make recovery consequences explicit: what becomes current after restore, what happens to current edits or drafts, whether a restored version creates a new version, which comments or metadata carry forward, and which older versions are hidden by retention or permissions.
Good UI
A document side panel marks v42 as Current, lists v41, v38 named Pre-launch copy, and v35 autosaved, and opens a compare preview before Restore this version.
Bad UI
The current version disappears from context while browsing older versions.
Good UX
A designer names the last approved file version, compares it against the current version, confirms restore, and sees that the restore created v43 while keeping v42 available.
Bad UX
The current version disappears from context while browsing older versions.
Best fit
Users edit documents, files, pages, design files, records, configurations, or published content over time.
Avoid when
The task is only immediate recovery from one recent action.
Required state
Default state with current version, previous version list, author, timestamp, and change summary.
Accessibility burden
Use structured list, table, or tab semantics so version number, current status, author, timestamp, and label are read together.
Common misuse
Using a timeline of milestones as a substitute for previewable or restorable versions.

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.

Timeline

UI or UX
UI + UX - Bounded chronological record of past, current, or expected events
UI guidance
Render the timeline as a labelled chronological sequence where each event has a visible date or time, event title, actor or system source when known, status or type, and a short summary.
UX guidance
Use timeline when users need to understand what happened, where they are now, and what may happen next in a case, claim, application, order, incident, or process.
Good UI
A benefits application timeline groups events by date and shows Application submitted, Evidence requested, Evidence received, Decision pending, and Next review, with actor, timestamp, and status marker.
Bad UI
A dense audit table is squeezed into timeline cards and hides changed fields, exact actor identity, and retention proof.
Good UX
A caseworker filters the timeline to System events, sees two date groups hidden, restores all events, and the event order and current marker stay stable.
Bad UX
A user sees a future appointment marker styled like completed history and assumes the appointment already happened.
Best fit
Users need a chronological record of important events for one object, case, order, application, or process.
Avoid when
The surface is a live stream whose content keeps arriving and must preserve reader position.
Required state
Default timeline with heading, order label, date or phase groups, and event markers.
Accessibility burden
Use semantic list or ordered-list structure with date-group headings and text event labels.
Common misuse
Omitting dates, actors, or event summaries and expecting icons to communicate the sequence.

Undo

UI or UX
UX - Post-action recovery behavior
UI guidance
Show a named recovery affordance after the completed action, such as Undo delete for a specific task, near the result or in a consistent status region.
UX guidance
Let users move quickly through frequent reversible actions, then recover from mistakes after seeing the result.
Good UI
Deleting Quarterly report removes it from the list and shows a recovery panel saying Quarterly report deleted with an Undo task button.
Bad UI
Undo action disappears before users can activate it.
Good UX
Undo restores the deleted task to the list and reports Quarterly report restored.
Bad UX
The UI promises undo for a side effect that has already notified external recipients.
Best fit
The action is common and mistakes are likely.
Avoid when
Recovery would restore only part of the user's lost work.
Required state
Normal state before the user action.
Accessibility burden
Make the undo control keyboard reachable and programmatically identifiable.
Common misuse
Restoring only part of the prior state while implying full recovery.

Draft state

UI or UX
UI + UX - Unpublished object version lifecycle
UI guidance
Label the current version explicitly as Draft, Unpublished changes, Published, Active, Locked, or Unavailable, and place that label near the object title, list row, editor header, and publish actions.
UX guidance
Use draft state when users need to pause work on an object, return later, and decide whether to publish, activate, discard, or keep editing an unpublished version.
Good UI
A knowledge article header says Draft saved today, shows the currently published title, and offers Resume draft, Compare with published, Discard draft, and Publish.
Bad UI
A draft label is missing from the editor, so users publish or discard the wrong version.
Good UX
A user opens a published article that has an unpublished version, chooses Resume draft, reviews a change summary, publishes, and sees the page become visible to viewers.
Bad UX
A user discards a shared draft and unknowingly removes another editor's unpublished changes.
Best fit
Users need to pause and resume unfinished work across sessions, devices, or routes.
Avoid when
The change is a small one-field edit that should be saved or canceled immediately.
Required state
Published or active state with an available draft.
Accessibility burden
Use headings and status regions so screen reader users know whether they are editing a draft or viewing the active version.
Common misuse
Using Saved to mean both saved draft and published content.

Publish workflow

UI or UX
UI + UX - Workflow for moving edited material to live, staged, scheduled, or retired state
UI guidance
Render publish workflow as a readiness and release surface with content identity, current status, target destination, affected pages or entries, preview, validation, permission, schedule, publish, unpublish, rollback, and live verification.
UX guidance
Use publish workflow when a user is moving content, product data, site changes, configuration, release notes, or campaign material from draft, staged, scheduled, or approved state to a selected live or public target.
Good UI
A CMS publish panel shows Draft article, production site, English and French locales, validation complete, preview URL, scheduled time, affected entries, and actions to Publish now, Schedule, or Keep draft.
Bad UI
A production publish happens when the user intended staging only.
Good UX
A content editor previews a campaign page, fixes a missing hero image, schedules publication and retirement times, sees the job queued, and later verifies the live URL and scheduled unpublish state.
Bad UX
A user clicks Save and assumes the page is live because the interface uses Save, Submit, Schedule, and Publish interchangeably.
Best fit
Users need to make content, products, pages, releases, site changes, campaigns, or configuration visible to an audience.
Avoid when
The user is only saving unfinished work.
Required state
Draft or edited but unpublished state
Accessibility burden
Use labelled controls for status, target, preview, schedule date and time, timezone, validation, publish, unpublish, rollback, and live URL.
Common misuse
Using Save, Submit, Schedule, and Publish interchangeably.

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
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 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
Feedback must preserve author, timestamp, reply, resolution, assignment, or moderation context.
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.

Permission denied state

UI or UX
UI + UX - Authorization and access-boundary state
UI guidance
Show the blocked object or action, current account, permission level, required role, owner, and request path when revealing that information is allowed.
UX guidance
Use permission denied state when the system knows the user is authenticated but their role, group, share, license, policy, or approval status blocks a specific object or action.
Good UI
A report page says Quarterly revenue report requires Finance viewer access, shows the current account, names the report owner, and offers Request access and Switch account.
Bad UI
A denial page says Something went wrong and shows Retry even though the user lacks a required group.
Good UX
A user opens a restricted report, sees which account is signed in, requests viewer access with a reason, then sees that the request is pending with the owner.
Bad UX
Every workspace control is disabled after one missing permission, including safe navigation and read-only tasks.
Best fit
A signed-in user lacks permission to view, edit, publish, export, delete, approve, share, administer, or configure a resource.
Avoid when
The operation failed for network, server, validation, data, or timeout reasons after permission was granted.
Required state
Whole-object access denied state.
Accessibility burden
Move focus to the permission message when it replaces page content or blocks a workflow.
Common misuse
Treating authorization denial as a generic retryable error.
Decision rules
  • Choose version history when the product stores previous version snapshots that users can browse, name, preview, compare, restore, or cite as a saved state of one document, file, page, configuration, or object.
  • A version history surface must identify the current version, previous version list, named version labels, autosaved version metadata, author, timestamp, retention limit, compare result, restore consequence, and permission state.
  • Choose activity log when users need evidence-oriented records of who did what, to which object, when, from where, and with what result; an activity log may mention changes but it is not necessarily a restorable snapshot browser.
  • Choose timeline when users need a readable sequence of milestones, case events, releases, or status changes; a timeline can summarize history without exposing exact version content or restore actions.
  • Choose undo when the recovery window is immediate and local to a recent action; undo should not replace durable version history for previous version review, named version recall, or rollback after a session ends.
  • Choose draft state when the user is editing current unpublished work; version history can contain older snapshots of that work, but draft state describes the current unsent or unfinished state.
  • Choose publish workflow when the task is making one selected version live, scheduled, unpublished, or retired; version history may help choose the version, but publishing owns live-state routing.
  • Use comments for discussion, annotation, and review conversation attached to content; comments can explain a version but are not themselves version snapshots.
  • Use permission-denied state when a user can see the object but cannot view, compare, name, restore, or download a version because access is restricted.
  • Do not call an audit trail, activity feed, autosave spinner, comment thread, release timeline, or browser back stack version history unless it exposes durable previous versions with current version context and restore rules.
Inspect live examples
Failure modes
  • Users cannot tell which row is the current version before restoring a previous version.
  • A restore action overwrites current edits without preview, compare, confirmation, or draft conflict handling.
  • The UI lists activity events but no restorable snapshot, causing activity log confusion.
  • Named versions and autosaved versions are mixed without labels, making the known good version hard to find.
  • A permission-limited viewer sees private author, comment, or diff details from versions they cannot access.
  • Retention limits or deleted author states hide why an expected previous version is unavailable.

Saved items