PluginBench
Skill
Pass
Audit score 90

principle-minimize-reader-load

cursor/plugins

Reduce code complexity by minimizing reader cognitive load—collapse unnecessary layers and shrink mutable state.

What is principle-minimize-reader-load?

This principle guides code review and refactoring by measuring maintainability through two axes: layers of indirection between a question and its answer, and hidden or mutable state readers must hold in memory. Apply it when code is hard to trace, to identify and eliminate unnecessary wrappers, pass-through abstractions, and scattered state.

  • Count indirection layers between a code question and its answer to identify unnecessary abstraction
  • Measure hidden or mutable state that readers must keep in working memory
  • Collapse one-caller wrappers and pass-through adapters that repeat methods without compression
  • Shrink mutable scope by preferring pure functions, locals over fields, and derived over synchronized state
  • Demand interface compression at boundaries to hide meaningful decisions rather than repeat surface complexity

How to install principle-minimize-reader-load

npx skills add https://github.com/cursor/plugins --skill principle-minimize-reader-load
Claude Code
Cursor
Windsurf
Cline

How to use principle-minimize-reader-load

  1. 1.When reviewing code, identify the two axes: count layers between the question and answer, and list hidden or mutable state readers must track
  2. 2.Apply the 30-second test: can a new reader answer 'where does X come from?' and 'what can change X?' in under 30 seconds?
  3. 3.If the test fails, collapse unnecessary layers by inlining one-caller wrappers and removing pass-through adapters
  4. 4.Shrink state scope by converting mutations to returns, moving fields to locals, and deriving values instead of syncing them
  5. 5.Before adding a new layer or state, verify it reduces reader load elsewhere by at least as much as it costs

Use cases

Good for
  • Reviewing a codebase where tracing a feature requires jumping through multiple adapter layers
  • Refactoring a module with broad interfaces that expose both surface and implementation details
  • Identifying why a new team member struggles to answer 'where does X come from?' quickly
  • Deciding whether to add a new abstraction layer or inline an existing one
  • Reducing cognitive overhead in codebases with scattered global or module-level mutable state
Who it's for
  • Code reviewers evaluating maintainability
  • Refactoring engineers optimizing for readability
  • Team leads designing module boundaries
  • Developers onboarding to complex codebases

principle-minimize-reader-load FAQ

How is this different from cyclomatic complexity or LOC metrics?

Reader load directly measures cognitive work—the thing that matters for maintainability. LOC and cyclomatic complexity are proxies that can miss flat files with 50 globals or miss the real cost of indirection.

What's a 'pass-through layer'?

A layer that repeats the same methods and arguments as the layer below it without changing the abstraction. It adds reader load without compression and should be collapsed.

When should I keep a layer even if it has only one caller?

Keep it only if it reduces reader load elsewhere by at least as much as it costs. A single-caller wrapper that hides a complex decision or shrinks state scope may be worth keeping.

How do I 'name the invariant at the boundary'?

Document or encode the constraint once at the interface level (e.g., in a type or precondition) so readers learn it once, rather than inferring it from every consumer.

What's the relationship to 'Guard the Context Window'?

Both protect finite cognitive resources—one for AI models, one for human readers. Reader load is the human analog of context-window pressure.

Full instructions (SKILL.md)

Source of truth, from cursor/plugins.


name: principle-minimize-reader-load description: "Apply when reviewing or shaping code that's hard to trace. Count layers between question and answer, and hidden state in the reader's head; collapse one-caller wrappers and shrink mutable scope." disable-model-invocation: true

Minimize Reader Load

Maintainability is the work a reader must do to understand code. Track two axes:

  1. Layers to trace. How many indirections sit between the question and the answer.
  2. State to hold. How much hidden or mutable context the reader must keep in their head.

Why: Code is read far more than it is written. LOC, cyclomatic complexity, and "clean architecture" are proxies. Reader load is the thing that matters. The two axes are independent. A flat file with 50 globals can be as hard to reason about as a 6-layer adapter stack. Guard both. This is the human analog of Guard the Context Window. Working memory is finite for readers too.

The pattern:

  • Collapse layers that cost more than they save: wrappers with one caller, adapters with no second implementation, speculative indirection that was never needed. Inline them.
  • Make adjacent layers change the abstraction. A layer that repeats the same methods and arguments adds reader load without compression. Collapse pass-through layers.
  • Demand interface compression. A broad interface that hides little complexity makes readers learn both the surface and the implementation. Prefer boundaries that hide meaningful decisions.
  • Shrink state scope: prefer pure functions (returns over mutations), locals over fields, fields over module state, and module state over globals. Derive instead of sync.
  • Name the invariant at the boundary, not in every consumer, so the reader learns it once.
  • Before adding a layer or a piece of state, ask: does this reduce reader load somewhere else by at least as much?

The test: Can a new reader answer "where does X come from?" and "what can change X?" in under 30 seconds? If not, cut layers or cut state.