Application · lesson 9 of 12 · Collaboration And Social Interaction

Follow / subscribe

Underlying principle: Collaborative interfaces show who changed what, where attention is needed, and how a person can respond. Shared state needs clear ownership and timing.

Provide a per-object follow / subscribe control that names the watched target, shows current state and scope, previews included events and delivery destination, explains automatic subscriptions, supports immediate and digest modes, handles permission changes, and keeps unfollow or unsubscribe available from the same context.

Start with the decision

Does this fit your task?

Users need future updates from a specific object, thread, channel, space, repository, topic, saved view, or query.

Review the boundary: Compare the task with the alternatives in the decision section.

Review the decision →
Study the interaction

Follow the task before choosing the component

Collaborative interfaces show who changed what, where attention is needed, and how a person can respond. Shared state needs clear ownership and timing.

01 / Recognize the need

What the person is doing

Products may allow users to follow threads, pages, spaces, channels, repositories, issues, pull requests, saved searches, saved views, calendars, authors, topics, or entire workspaces.

02 / Design the response

What the interface must communicate

Provide a per-object follow / subscribe control that names the watched target, shows current state and scope, previews included events and delivery destination, explains automatic subscriptions, supports immediate and digest modes, handles permission changes, and keeps unfollow or unsubscribe available from the same context.

Following state.

03 / Judge the outcome

What to look for

What exact object, scope, or query does this control subscribe the user to?

The control updates its visible label and selected state only after the product can explain the resulting scope and delivery behavior.

Decision first

Choose this pattern when the problem matches

Use when

  • Users need future updates from a specific object, thread, channel, space, repository, topic, saved view, or query.
  • The product can maintain subscription records, delivery rules, event types, frequency, and unsubscribe behavior.
  • The user benefits from fewer manual checks and from a visible promise about what will notify them later.

Avoid when

  • Another person needs to notify the user immediately inside authored content.
  • Updates are critical current-task blockers that must appear in context regardless of subscription.
  • The target is too sensitive to reveal follow state, watchers, or update delivery.

Problem it prevents

Products may allow users to follow threads, pages, spaces, channels, repositories, issues, pull requests, saved searches, saved views, calendars, authors, topics, or entire workspaces.

Test the behavior

Try strong and weak versions of the interaction

Open the working example, try its controls, and compare the behavior against the decision guidance.

In the lab you can
  • switch between strong UI, weak UI, strong UX, and weak UX;
  • trigger required, empty, loading, error, and recovery states;
  • inspect keyboard and accessibility expectations beside the demo.
Launch Follow / subscribe in the lab
Pattern anatomy

What a strong implementation has to make clear

User need

Products may allow users to follow threads, pages, spaces, channels, repositories, issues, pull requests, saved searches, saved views, calendars, authors, topics, or entire workspaces.

Pattern promise

Provide a per-object follow / subscribe control that names the watched target, shows current state and scope, previews included events and delivery destination, explains automatic subscriptions, supports immediate and digest modes, handles permission changes, and keeps unfollow or unsubscribe available from the same context.

Required state

Following state.

Failure to inspect

A subscription survives permission loss and sends dead links.

Access contract

Give the control an accessible name that includes target type, target name, current follow state, and destination when space allows.

Quality bar

The difference between expert and weak execution

Strong implementation

Specific, visible, recoverable

  • 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 Confluence page watch button says Watching page, separates page watch from space watch, and shows that edits and comments are sent by email or in-app notifications according to user settings.
  • 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.
  • A team member watches a project space for onboarding updates, sees that daily digest is active, and switches one critical page to immediate notifications.
Weak implementation

Vague, hidden, hard to recover from

  • A repository is watched automatically after one comment, but the user only finds the unsubscribe action three screens deep in global settings.
  • A followed saved view keeps sending links after the user loses access to the underlying project.
  • A subscription survives permission loss and sends dead links.
  • A digest delays a critical update that should have appeared in context.
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.
  • Distinguish following from mentions, notifications, activity feeds, comments, saved views, and favorites by showing that the user is changing future update delivery for one target rather than sending attention, reading history, writing content, or bookmarking access.
UX guidance
  • Use follow / subscribe when users want future changes to a specific object, channel, thread, repository, page, space, saved view, or topic to come to them without repeatedly checking it.
  • 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.
Implementation contract

What the implementation must handle

States

  • Following state.
  • Watching broader parent scope state.
  • Auto-followed because replied, mentioned, authored, assigned, or created state.
  • Pending subscription update state.

Interaction

  • The control updates its visible label and selected state only after the product can explain the resulting scope and delivery behavior.
  • Users can inspect why they are receiving updates from the object context or notification item, including manual, auto-follow, parent-scope, mention, or preference reasons.
  • Delivery settings separate target scope, event type, channel, frequency, digest, and quiet-mode behavior.
  • If access is lost or a target is archived, completed, deleted, or closed, future updates are stopped or downgraded and stale subscriptions become explainable.

Accessibility

  • Give the control an accessible name that includes target type, target name, current follow state, and destination when space allows.
  • Announce successful follow, unfollow, mute, failed update, and pending sync through status text.
  • Make scope and delivery details reachable from keyboard and touch, including overflow-menu implementations.
  • Keep focus stable when the label changes from Follow to Following or Unfollow.

Review

  • What exact object, scope, or query does this control subscribe the user to?
  • Which future events will produce updates, and where will those updates appear?
  • Can the user see why they were automatically subscribed?
  • How are parent-scope watches, item-level watches, and duplicates resolved?
Evidence trail

Source-backed claims behind this guidance

Full agent/debug reference

Problem Context

  • Products may allow users to follow threads, pages, spaces, channels, repositories, issues, pull requests, saved searches, saved views, calendars, authors, topics, or entire workspaces.
  • Subscriptions can be created manually by clicking Follow, Subscribe, or Watch, or automatically when the user replies, is mentioned, creates content, owns an object, joins a team, or changes notification settings.
  • Delivery may happen through notification center, activity feed, email, push, desktop banners, digests, followed-thread lists, channel badges, or integrations.
  • The same word can mean different scopes across products: watching a page differs from watching a space, following a thread differs from following a channel, and subscribing to a saved view differs from saving it.
  • Noisy subscriptions often persist longer than the user's original need, so users need narrow scope, visible reasons, and quick cleanup.

Selection Rules

  • Choose follow / subscribe when the user is opting into future update delivery from a specific target.
  • Use notification center for the retained inbox where delivered subscription updates are triaged, marked read, filtered, and acted on.
  • Use activity feed for broad catch-up across many sources; use follow / subscribe to decide which sources or objects are elevated from that stream.
  • Use mentions when another person routes attention to the user inside authored content.
  • Use threaded discussion when replies and branches need conversation structure; use follow / subscribe to control future reply delivery.
  • Use comments when the user is contributing written feedback; subscribing to comments only controls future comment updates.
  • Use saved view when the user stores a filtered surface; add follow / subscribe only when future changes to that view trigger delivery.
  • Use settings management for global defaults such as email, push, digest, quiet hours, and channel-level notification behavior.
  • Use favorites or pinned items for quick return access without update delivery.
  • Show whether the subscription target is one item, one thread, one channel, a page and descendants, a space, a repository, a query, or all matching future items.
  • Explain automatic follow reasons such as replied, mentioned, author, assigned, owner, or all-new-posts preference.
  • Provide unsubscribe, unfollow, mute, reduce frequency, and delivery-channel controls without forcing users to leave the object context.

Required States

  • Not following state.
  • Following state.
  • Watching broader parent scope state.
  • Auto-followed because replied, mentioned, authored, assigned, or created state.
  • Pending subscription update state.
  • Unfollowed or unsubscribed state.
  • Muted or delivery disabled state.
  • Delivery destination selection state such as Activity feed, notification center, banner, push, email, or digest.
  • Event-type selection state such as all updates, replies only, comments, edits, mentions, releases, or status changes.
  • Digest or immediate delivery state.
  • Permission-limited or inaccessible target state.
  • Deleted, archived, completed, closed, or resolved target state.
  • Bulk unsubscribe or manage subscriptions state.

Interaction Contract

  • Activating Follow, Subscribe, or Watch creates or updates a subscription record for the named target, not merely a visual bookmark.
  • The control updates its visible label and selected state only after the product can explain the resulting scope and delivery behavior.
  • Users can inspect why they are receiving updates from the object context or notification item, including manual, auto-follow, parent-scope, mention, or preference reasons.
  • Unfollow or unsubscribe removes that subscription without deleting the target, comment, notification history, saved view, or favorite.
  • Delivery settings separate target scope, event type, channel, frequency, digest, and quiet-mode behavior.
  • If access is lost or a target is archived, completed, deleted, or closed, future updates are stopped or downgraded and stale subscriptions become explainable.
  • Bulk management pages show enough context to unsubscribe without losing track of which target or scope is being changed.

Implementation Checklist

  • Define subscription target types, parent-scope inheritance, event types, delivery channels, frequency, auto-follow triggers, unsubscribe behavior, and cleanup policy.
  • Store explicit reason metadata such as manual follow, replied, mentioned, created, assigned, team preference, space watch, repository watch, or saved-view subscription.
  • Render per-object state with current label, scope, included events, destination, frequency, and unfollow action.
  • Support immediate, digest, muted, paused, and delivery-disabled modes without losing the underlying subscription explanation.
  • Synchronize subscriptions with notification center, activity feed, email, push, channel badges, and followed-thread lists.
  • Handle permission changes, deleted targets, renamed targets, parent-scope changes, duplicate subscriptions, offline toggles, and bulk unsubscribe safely.
  • Test keyboard toggling, menu selection, screen-reader labels, mobile long-press or overflow menus, high-volume subscription lists, digest timing, and cross-device state.

Common Generated-UI Mistakes

  • Using Follow as a bookmark with no future update delivery.
  • Using Subscribe as a mailing-list opt-in without showing which object or event types are included.
  • Hiding Unfollow in global notification settings only.
  • Automatically following users without showing why they are receiving updates.
  • Treating parent-scope watches and item-level watches as the same state.
  • Sending both immediate and digest updates for the same event with no deduplication.
  • Keeping subscriptions active after target deletion, archive, permission loss, or issue closure.
  • Calling a notification center subscription management page the follow control itself.

Critique Questions

  • What exact object, scope, or query does this control subscribe the user to?
  • Which future events will produce updates, and where will those updates appear?
  • Can the user see why they were automatically subscribed?
  • Can the user unfollow, mute, reduce frequency, or change delivery without losing object context?
  • How are parent-scope watches, item-level watches, and duplicates resolved?
  • What happens when the object is archived, closed, deleted, renamed, or no longer accessible?
Accessibility
  • Give the control an accessible name that includes target type, target name, current follow state, and destination when space allows.
  • Do not rely on a filled star, bell, eye, or checkmark alone to indicate follow state.
  • Announce successful follow, unfollow, mute, failed update, and pending sync through status text.
  • Make scope and delivery details reachable from keyboard and touch, including overflow-menu implementations.
  • Keep focus stable when the label changes from Follow to Following or Unfollow.
  • Expose auto-follow reasons and parent-scope inherited watches as text, not only tooltip hover.
  • Ensure bulk subscription lists identify each target, scope, reason, and selected state for screen-reader users.
Keyboard Behavior
  • Tab moves to the follow control, scope menu, delivery menu, event-type options, frequency controls, and unsubscribe action.
  • Enter or Space toggles the primary follow state when there is only one safe default.
  • Enter or Space opens a menu instead of toggling when the product must choose scope or delivery first.
  • Escape closes scope or delivery menus and returns focus to the invoking control.
  • Arrow keys may move inside menu, radio, or listbox controls according to their native pattern.
  • After unsubscribe, focus remains on the target row or moves to the next subscription in bulk-management views.
Variants
  • Follow thread
  • Subscribe to issue
  • Watch repository
  • Watch page
  • Watch space
  • Follow channel
  • Subscribe to saved view
  • Follow topic
  • Digest subscription
  • Auto-followed thread
  • Bulk unsubscribe
  • Muted subscription

Verification

Source trail checked:

Saved items