MCPInstall

avoid-feature-creep

Keeps a change scoped to what was asked. Flags extra features, refactors, and 'while we are here' edits, and moves them to a suggestions list instead of the diff. Use when a request is small and the agent is about to expand it, when a PRD grows beyond its problem statement, or when the user says 'just do what I asked'.

Installs
1.3K
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/waynesutton/builder-skills --skill avoid-feature-creep
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads avoid-feature-creep automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Avoid feature creep

The request sets the scope. Everything the diff contains should trace back to a sentence in the ask. Anything else is a suggestion, not a change.

The core rule

Build what was asked. Not what would be nice, not what a senior engineer would also do, not what the codebase "should" have. If a line of the diff cannot be justified by the request, it does not belong in the diff.

This applies to product scope and to code scope. A PRD that grows past its problem statement has the same disease as a bug fix that ships with a refactor.

Signals that creep is starting

Stop when you notice any of these:

  • "While we're here" or "might as well" appears in your reasoning
  • Adding a config option, flag, or parameter for a case nobody asked about
  • Refactoring code adjacent to the change because it looked untidy
  • Adding a second feature to make the first one feel complete
  • Adding error handling for edge cases the user has never hit
  • Adding tests, types, or docs for code outside the change
  • Generalizing a one off into a reusable abstraction
  • Copying a competitor feature without a stated user need
  • A PRD section titled "Future" or "Nice to have" that keeps getting longer
  • The change touches a file the request never implied

Each of these might be a good idea. None of them are in scope unless the user says so.

What to do instead

  1. Finish the ask. Ship the smallest change that fully answers the request.
  2. Collect the extras as you go. Do not act on them.
  3. Put them in one place at the end:
    • In a chat or PR summary, under a Suggestions heading, one line each
    • In a PRD, under Out of scope with a one line reason
    • In a repo with a prds/ folder, append to the relevant PRD's Out of scope section
  4. Let the user pick. "The agent thought so" is not approval.

Suggestions are cheap to write and free to ignore. Unrequested code costs review time, adds bugs, and blurs what the change was for.

Stakeholders, including agents

Every feature request has a source: a PM, an exec, a user, a developer scratching an itch, or an AI coding agent. Treat them all the same way. Log the request, weigh it against the current scope, and defer it unless it solves the problem the work was started for.

AI agents are stakeholders now. They have opinions and they push. Common agent driven creep:

  • "Let me also add error handling for edge cases you haven't hit yet"
  • "This would be cleaner with a refactor"
  • "You should probably add tests for this"
  • "I added types for these additional scenarios"

If you are the agent, catch yourself doing this and move it to the suggestions list. If you are working with an agent, state the scope at the start of the session and treat its extras like any other stakeholder ask.

Before adding anything, ask:

  • Does this solve the problem the request named?
  • What is the smallest version that works?
  • What happens if we never build it?

If the first answer is no, it goes in suggestions.

Before and after

Request: "Add a deletedAt field to tasks and hide deleted tasks from the list query."

Before, the creeping version:

  • Added deletedAt to the schema
  • Added a by_user_and_deleted index
  • Rewrote list to use the index
  • Added softDelete, restore, and purgeDeleted mutations
  • Added a cron to purge after 30 days
  • Renamed list to listActive and updated three call sites
  • Added a showDeleted argument "for the admin view later"

After, the scoped version:

  • Added deletedAt: v.optional(v.number()) to the schema
  • Added the index and pointed list at it so deleted rows never load

Summary sent with the change:

Done: deletedAt field and list query now skips deleted tasks.

Suggestions
- A softDelete mutation to set deletedAt (nothing sets it yet)
- A restore mutation
- A cron to purge rows older than 30 days
- An admin flag on list to include deleted rows

Two lines of diff answered the request. Four lines of suggestions preserved every idea. The user decides what happens next.

PRDs

A PRD earns each section by pointing back to its problem statement. When a PRD grows:

  • Reread the problem statement. Cut anything that does not serve it.
  • Move cut items to Out of scope with one reason each.
  • If the cut items form a coherent feature, that is a second PRD, not a bigger first one.

Checklist

  • Every changed file is implied by the request
  • No new config options, flags, or parameters the request did not ask for
  • No refactors of adjacent code
  • No second feature added to round out the first
  • No tests, types, or docs added for code outside the change
  • Extras are listed under Suggestions in the summary or Out of scope in the PRD
  • The summary says what was done in one line before the suggestions
  • If the user said "just do what I asked", the diff contains only that

FAQ

What does the avoid-feature-creep skill do?

Keeps a change scoped to what was asked. Flags extra features, refactors, and 'while we are here' edits, and moves them to a suggestions list instead of the diff. Use when a request is small and the agent is about to expand it, when a PRD grows beyond its problem statement, or when the user says 'just do what I asked'.

How do I install avoid-feature-creep?

Run npx skills add https://github.com/waynesutton/builder-skills --skill avoid-feature-creep in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/avoid-feature-creep/ (personal) or .claude/skills/avoid-feature-creep/ (project).

Which AI agents can use avoid-feature-creep?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is avoid-feature-creep safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains avoid-feature-creep?

It is published by waynesutton in waynesutton/builder-skills. It has 1,272 recorded installs.

More from waynesutton/builder-skills

View all →

convex

waynesutton/builder-skills

Routes Convex work to the right builder skill and covers the handful of rules that apply everywhere: validators on every function, withIndex over filter, idempotent mutations, internal functions for scheduling. Use when a task mentions Convex and no more specific skill matches, or as the first stop before picking one.

convex-best-practices

waynesutton/builder-skills

Production patterns for Convex apps and the rules the @convex-dev/eslint-plugin enforces: validators, indexes, idempotent mutations, avoiding OCC conflicts, thin function wrappers, error handling. Use when reviewing Convex code, asking whether a pattern is right, setting up ESLint, or fixing write conflicts and slow queries.

convex-functions

waynesutton/builder-skills

Writes Convex queries, mutations, actions, and internal functions in the object form with args and returns validators, correct ctx usage, runtime boundaries, and error handling. Use when adding or changing anything in convex/.ts that exports a function, or when deciding between query, mutation, and action.

3.2K installs

convex-schema-validator

waynesutton/builder-skills

Designs convex/schema.ts tables, validators, indexes, and relationships, and keeps the schema honest as data evolves. Use when creating tables, adding fields, choosing index fields, modeling relationships, or when a validator error appears at deploy time.

DevOps & Cloud3K installs

convex-realtime

waynesutton/builder-skills

Builds reactive UIs on Convex subscriptions: useQuery patterns, optimistic updates, pagination that stays live, presence, and avoiding subscription churn. Use when wiring the frontend to Convex, when data does not update live, or when a page rerenders too much.

Frontend & Design2.9K installs

convex-cron-jobs

waynesutton/builder-skills

Schedules work in Convex: cron jobs in convex/crons.ts, one off scheduled functions with runAfter and runAt, batching large jobs, and cancelling or inspecting the queue. Use when something needs to run on a timer, later, or in the background, or when a cron is not firing.

2.8K installs

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs