---
title: "Zeigarnik Effect"
source: "/reference/zeigarnik-effect"
description: "Incomplete activity can remain mentally salient, which makes visible unfinished work a powerful cue to resume a task."
---
# Zeigarnik Effect

Incomplete activity can remain mentally salient, which makes visible unfinished work a powerful cue to resume a task.



### Principle

Incomplete activity can remain mentally salient, which makes visible unfinished work a powerful cue to resume a task.

### Why it matters

Products can help users return to interrupted work by preserving draft state, showing remaining steps, and making unfinished tasks easy to identify. The same mechanism can become coercive when products create artificial incompleteness, persistent badges, or anxiety to drive engagement. Layr should distinguish useful resumption support from pressure.

### Deeper design interpretation

Unfinished work tends to remain mentally salient, which can help users resume genuine tasks when the product preserves and surfaces that state. Drafts, incomplete applications, paused setup, and pending uploads benefit from clear resume cues because users do not have to reconstruct where they stopped.

The same mechanism can be abused. Artificial completion meters, persistent red dots, “unfinished” labels on optional profile fields, and repeated reminders can create pressure without helping users achieve a meaningful goal. Layr should evaluate incompleteness against the user's actual task rather than the product's desire for engagement.

A useful unfinished state has three properties: the work is genuinely incomplete, prior progress is preserved, and the path to completion is clear.

### What the agent should reason about

Determine whether the product can distinguish required work from optional enrichment. Inspect draft persistence, resume location, reminders, and completion criteria. If the system marks something incomplete, identify what concrete user goal remains unfinished.

The agent should report manipulative incompleteness cautiously and base the finding on observable completion logic rather than assumptions about intent.

### Common failure patterns

- Drafts exist but users cannot see whether they were saved.
- Incomplete tasks are indistinguishable from untouched tasks.
- Optional profile fields keep a permanent completion warning active.
- Resume links return users to the beginning rather than the last meaningful state.
- Notifications continue after the actual required task is complete.

### Audit questions

- Is the task genuinely unfinished according to the user's goal?
- Is prior work safely preserved?
- Can the user resume at the correct point?
- Are reminders proportional to the importance of completion and user preferences?

### Example agent finding

> **Medium — Onboarding remains “80% incomplete” because an avatar is missing.** All required workspace configuration is finished, yet the product continues to show an urgent completion warning for an optional profile field. Mark required onboarding complete and present profile enrichment separately without urgency.

### Agent directive

> Preserve and surface genuinely unfinished user work. Avoid inventing incomplete states solely to create urgency or compulsive return behavior.

### Apply this when

- Drafts, onboarding, setup, applications, checkout, uploads, project tasks, learning, and multi-session workflows.

### Observable signals

- A user can leave a task but cannot tell later whether work was saved.
- Incomplete items are visually identical to untouched or completed items.
- The product uses badges or completion pressure for optional profile fields unrelated to the user's goal.
- Draft state disappears after navigation.
- A task remains marked incomplete even when all required work is done because optional engagement steps remain.

### Recommended actions

- Autosave or explicitly save recoverable drafts where appropriate.
- Show meaningful resume points and remaining required work.
- Distinguish required completion from optional enrichment.
- Clear completion indicators once the actual task is done.
- Use reminders according to user intent and notification preferences.

### Do not over-apply

Do not weaponize incompleteness. Persistent red dots, fake urgency, and arbitrary completion scores can increase anxiety without helping the user finish meaningful work.

### Example

**Weak:** A product keeps a permanent '80% complete' warning because the user has not uploaded an optional avatar.

**Stronger:** Required onboarding reaches 100% when necessary setup is finished; optional profile improvements are presented separately without urgency.

### Evaluation notes

- **Default severity:** Medium; high when lost progress or manipulative pressure has significant cost.
- **Typical confidence:** High for saved/incomplete state; medium for motivational effect.
- **Primary evidence:** Draft persistence, required/optional logic, badges, resume state, notification behavior.
- **Related rules:** Goal-Gradient Effect, Working Memory, Peak-End Rule, Parkinson's Law

### References

- [Laws of UX — Zeigarnik Effect](https://lawsofux.com/zeigarnik-effect/)

## Related rules

- [Goal-Gradient Effect](/__layr/pages/reference/goal-gradient-effect.md)
- [Working Memory](/__layr/pages/reference/working-memory.md)
- [Peak-End Rule](/__layr/pages/reference/peak-end-rule.md)
- [Parkinson's Law](/__layr/pages/reference/parkinsons-law.md)

## Agent guidance

Review criteria, the finding contract a report must use, and worked examples.

Established principle; Layr interpretation and agent guidance. Category: Motivation, Progress & Experience Memory.

## Retrieve
- Canonical page: https://layr.design/reference/zeigarnik-effect
- Markdown for agents: https://layr.design/__layr/pages/reference/zeigarnik-effect.md
- Reference map: https://layr.design/llms.txt
- Route index: https://layr.design/__layr/routes.toon

## Rule object
```yaml
rule:
  id: "zeigarnik-effect"
  title: "Zeigarnik Effect"
  category: "Motivation, Progress & Experience Memory"
  origin: established
  canonical_url: "https://layr.design/reference/zeigarnik-effect"
  principle: "Incomplete activity can remain mentally salient, which makes visible unfinished work a powerful cue to resume a task."
  directive: "Preserve and surface genuinely unfinished user work. Avoid inventing incomplete states solely to create urgency or compulsive return behavior."
  applies_when:
    - "Drafts, onboarding, setup, applications, checkout, uploads, project tasks, learning, and multi-session workflows."
  observable_signals:
    - "A user can leave a task but cannot tell later whether work was saved."
    - "Incomplete items are visually identical to untouched or completed items."
    - "The product uses badges or completion pressure for optional profile fields unrelated to the user's goal."
    - "Draft state disappears after navigation."
    - "A task remains marked incomplete even when all required work is done because optional engagement steps remain."
  audit_questions:
    - "Is the task genuinely unfinished according to the user's goal?"
    - "Is prior work safely preserved?"
    - "Can the user resume at the correct point?"
    - "Are reminders proportional to the importance of completion and user preferences?"
  recommended_actions:
    - "Autosave or explicitly save recoverable drafts where appropriate."
    - "Show meaningful resume points and remaining required work."
    - "Distinguish required completion from optional enrichment."
    - "Clear completion indicators once the actual task is done."
    - "Use reminders according to user intent and notification preferences."
  avoid_when:
    - "Do not weaponize incompleteness. Persistent red dots, fake urgency, and arbitrary completion scores can increase anxiety without helping the user finish meaningful work."
  common_failure_patterns:
    - "Drafts exist but users cannot see whether they were saved."
    - "Incomplete tasks are indistinguishable from untouched tasks."
    - "Optional profile fields keep a permanent completion warning active."
    - "Resume links return users to the beginning rather than the last meaningful state."
    - "Notifications continue after the actual required task is complete."
  evidence_types:
    - "Draft persistence"
    - "required/optional logic"
    - "badges"
    - "resume state"
    - "notification behavior"
  default_severity: "Medium; high when lost progress or manipulative pressure has significant cost."
  typical_confidence: "High for saved/incomplete state; medium for motivational effect."
  related_rules:
    - { id: "goal-gradient-effect", title: "Goal-Gradient Effect", url: "https://layr.design/reference/goal-gradient-effect" }
    - { id: "working-memory", title: "Working Memory", url: "https://layr.design/reference/working-memory" }
    - { id: "peak-end-rule", title: "Peak-End Rule", url: "https://layr.design/reference/peak-end-rule" }
    - { id: "parkinsons-law", title: "Parkinson's Law", url: "https://layr.design/reference/parkinsons-law" }
```

## What to reason about
Determine whether the product can distinguish required work from optional enrichment. Inspect draft persistence, resume location, reminders, and completion criteria. If the system marks something incomplete, identify what concrete user goal remains unfinished. The agent should report manipulative incompleteness cautiously and base the finding on observable completion logic rather than assumptions about intent.

## Routing
Route a review here when the interface manages progress, interruption, completion, waiting, resumption, or emotionally significant outcomes. Avoid inferring motivation from UI alone; tie findings to observable journey states.

## Review procedure
For every finding:
1. Identify the exact component, state, route, or interaction.
2. State the observable evidence.
3. Name the principle that applies.
4. Explain the user consequence in the current context.
5. Estimate severity from the consequence, frequency, and reversibility.
6. Recommend the smallest change that addresses the issue while preserving the product's existing design system.
7. Lower confidence when intent, frequency, audience, device, or product constraints must be inferred.
8. Do not produce generic advice such as "improve hierarchy" or "make this clearer" without specifying what is wrong and why.

## Finding contract — emit exactly this shape
```yaml
finding:
  rule_id: string
  location: string
  evidence:
    - observable fact
  impact: string
  severity: low | medium | high | critical
  confidence: low | medium | high
  recommendation:
    change: string
    rationale: string
    preserve:
      - existing design-system behavior
      - valid product constraints
```

## Example finding for this rule
Medium — Onboarding remains “80% incomplete” because an avatar is missing. All required workspace configuration is finished, yet the product continues to show an urgent completion warning for an optional profile field. Mark required onboarding complete and present profile enrichment separately without urgency.

## Code reference

The same principle as markup. Compare the structure, not the class names.

```html
<!-- weak -->
<div class="example-ui example-ui-weak">
  <div class="scene-chrome">
    <span class="scene-chrome-app">Workspace</span>
    <span class="scene-chrome-view">Setup</span>
  </div>
  <div class="scene-body">
    <div class="scene-panel">
      <span class="scene-panel-title">Workspace setup</span>
      <div class="scene-row">
        <span class="scene-stat-value">80%</span>
        <span class="scene-tag scene-tag-warning">Incomplete</span>
      </div>
      <span class="scene-progress">
        <span class="scene-progress-fill" style="width:80%"></span>
      </span>
      <div class="scene-row">
        <span class="scene-check-row">
          <span class="scene-check scene-check-on"></span>
          <span>Identity and ownership</span>
        </span>
        <span class="scene-meta">Done</span>
      </div>
      <div class="scene-row">
        <span class="scene-check-row">
          <span class="scene-check"></span>
          <span>Upload an avatar</span>
        </span>
        <span class="scene-tag scene-tag-warning">Required</span>
      </div>
      <span class="scene-note">Optional field keeps a permanent warning active</span>
    </div>
  </div>
</div>
```

```html
<!-- stronger -->
<div class="example-ui example-ui-strong">
  <div class="scene-chrome">
    <span class="scene-chrome-app">Workspace</span>
    <span class="scene-chrome-view">Setup</span>
  </div>
  <div class="scene-body">
    <div class="scene-panel">
      <span class="scene-panel-title">Workspace setup</span>
      <div class="scene-row">
        <span class="scene-stat-value">100%</span>
        <span class="scene-tag scene-tag-success">Required setup complete</span>
      </div>
      <span class="scene-progress">
        <span class="scene-progress-fill" style="width:100%"></span>
      </span>
      <div class="scene-row">
        <span class="scene-check-row">
          <span class="scene-check scene-check-on"></span>
          <span>Identity and ownership</span>
        </span>
        <span class="scene-meta">Done</span>
      </div>
    </div>
    <div class="scene-panel scene-panel-quiet">
      <span class="scene-panel-title">Optional improvements</span>
      <div class="scene-row scene-row-muted">
        <span>Add an avatar</span>
        <span class="scene-tag scene-tag-neutral">Any time</span>
      </div>
      <span class="scene-meta">Draft saved 2 min ago · resume where you stopped.</span>
    </div>
  </div>
</div>
```

```css
/* declarations these studies depend on */
.example-ui { display: grid; grid-template-rows: auto minmax(0, 1fr); min-width: 0; min-height: 17rem; overflow: hidden; border: var(--border-thin) solid var(--color-border-strong); background: var(--color-background); color: var(--color-text); font-size: var(--text-xs); line-height: var(--leading-snug); }
.example-ui .scene-chrome { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-1) var(--space-2); padding: var(--space-2) var(--space-3); border-bottom: var(--border-thin) solid var(--color-border-strong); background: var(--color-surface); }
.example-ui .scene-chrome-app { font-size: var(--text-2xs); font-weight: 600; letter-spacing: var(--tracking-label); text-transform: uppercase; }
.example-ui .scene-chrome-view { color: var(--color-text-tertiary); font-size: var(--text-2xs); }
.example-ui .scene-body { display: grid; align-content: start; gap: var(--space-3); min-width: 0; padding: var(--space-3); }
.example-ui .scene-body:has(> .scene-panel:only-child) { align-content: stretch; }
.example-ui .scene-panel { display: grid; align-content: start; justify-items: start; gap: var(--space-2); min-width: 0; padding: var(--space-3); border: var(--border-thin) solid var(--color-border-strong); background: var(--color-surface-raised); }
.example-ui .scene-panel-quiet { border-color: var(--color-border-subtle); background: var(--color-surface); }
.example-ui .scene-panel-title { font-size: var(--text-sm); font-weight: 600; letter-spacing: var(--tracking-heading); }
.example-ui .scene-row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: var(--space-1) var(--space-2); width: 100%; min-width: 0; padding-block: var(--space-1); }
.example-ui .scene-panel > .scene-row + .scene-row { border-top: var(--border-thin) solid var(--color-border-subtle); }
.example-ui .scene-row-muted { color: var(--color-text-tertiary); }
.example-ui .scene-meta { color: var(--color-text-tertiary); font-size: var(--text-2xs); }
.example-ui .scene-note { width: 100%; padding-top: var(--space-2); border-top: var(--border-thin) solid var(--color-border-subtle); color: var(--color-text-tertiary); font-family: var(--font-mono); font-size: var(--text-2xs); line-height: var(--leading-snug); }
.example-ui .scene-tag { display: inline-block; padding: 0 var(--space-2); border: var(--border-thin) solid var(--color-border-strong); color: var(--color-text-secondary); font-size: var(--text-2xs); line-height: 1.6; white-space: nowrap; }
.example-ui .scene-tag-neutral { border-color: var(--color-border-strong); }
.example-ui .scene-tag-warning { border-color: var(--color-caution); color: var(--color-caution); }
.example-ui .scene-tag-success { border-color: var(--color-success); color: var(--color-success); }
.example-ui .scene-check { display: inline-block; width: 13px; height: 13px; border: var(--border-thin) solid var(--color-border-strong); border-radius: var(--radius-xs); }
.example-ui .scene-check-on { border-color: var(--color-primary-bg); background: var(--color-primary-bg); }
.example-ui .scene-check-row { display: inline-flex; align-items: center; gap: var(--space-2); min-width: 0; }
.example-ui .scene-progress { display: block; width: 100%; height: var(--space-2); background: var(--diagram-fill); }
.example-ui .scene-progress-fill { display: block; height: 100%; background: var(--color-action); }
.example-ui .scene-stat-value { font-size: var(--text-lg); font-variant-numeric: tabular-nums; letter-spacing: var(--tracking-heading); line-height: var(--leading-none); }
.example-ui { min-height: 15rem; }

/* resolved values */
:root {
  --border-thin: 1px;
  --font-mono: "Geist Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace;
  --leading-none: 0.98;
  --leading-snug: 1.35;
  --radius-xs: 2px;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --text-2xs: 0.6875rem;
  --text-lg: 1.375rem;
  --text-sm: 0.875rem;
  --text-xs: 0.75rem;
  --tracking-heading: -0.025em;
  --tracking-label: 0.06em;
}
```

## Weak vs stronger
- Weak: A product keeps a permanent '80% complete' warning because the user has not uploaded an optional avatar.
- Stronger: Required onboarding reaches 100% when necessary setup is finished; optional profile improvements are presented separately without urgency.

## Reporting rules
- Report only what the interface shows as observable evidence; phrase psychological or motivational effects as possible consequences.
- Returning no finding is a valid result when evidence is insufficient.
