Help us improve
Share bugs, ideas, or general feedback.
From builder-product
Use before any engineering estimate is made. Requires a written scope before an estimate, and a written estimate before a commit. Blocks "we'll scope as we go" and "just give me a rough number" completions.
npx claudepluginhub rbraga01/a-team --plugin builder-productHow this skill is triggered — by the user, by Claude, or both
Slash command
/builder-product:feature-scopingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
```
Provides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.
Share bugs, ideas, or general feedback.
A FEATURE ESTIMATED WITHOUT A WRITTEN SCOPE IS A COMMITMENT MADE AGAINST UNKNOWN WORK.
"Give me a rough number" produces a number that becomes a deadline before the scope is understood.
Written scope → time estimate against that scope → explicit commit IS a feature decision.
Trigger before:
A scope document answers four questions before any estimate is given.
User-visible behaviour only. Not implementation details.
The user can:
- [Action 1] — e.g., "filter search results by date range"
- [Action 2] — e.g., "export the filtered results as CSV"
The system will:
- [Behaviour 1] — e.g., "persist filter state across sessions"
Name the exclusions. Every implicit exclusion is a future dispute.
NOT included in this scope:
- [Exclusion 1] — e.g., "bulk export (> 1000 rows)"
- [Exclusion 2] — e.g., "real-time filter updates without page reload"
Specific, testable conditions that define "done":
Given [state], when [action], then [observable result].
Acceptance criteria are the contract between product and engineering. Vague criteria ("works correctly") are not acceptance criteria.
Dependencies:
- [Service/team/data that must be ready before this can ship]
Risks:
- [Known unknowns that could expand the estimate]
An estimate is only valid if it names the scope document it was made against.
Estimate format:
Feature: <name>
Scope reference: product/scopes/<feature>-<date>.md
Estimate: <N days> (confidence: high / medium / low)
Assumptions: [any assumption that, if wrong, invalidates the estimate]
Not included: [any exclusion the estimate depends on]
What does NOT count as an estimate:
A commit is an estimate made public. Before committing:
If any of these are false, the "commitment" is a guess that will be held as a promise.
Before any number is given. Create product/scopes/<feature>-<date>.md with all four sections.
Engineering estimates the scope document — not a verbal description of it. The estimate references the scope file path.
Product and engineering review the assumptions explicitly. Any assumption that product disputes is a scope change — update the document and re-estimate.
When a deadline is shared with stakeholders, share the scope reference. "We'll have X by [date], scope is product/scopes/X-YYYYMMDD.md" makes the scope part of the commitment.
If scope changes after commit, the estimate is re-done. No exceptions. "It's a small addition" always comes with a small amount of time that nobody accounted for.
These thoughts mean scoping was skipped — stop:
When feature-scoping is satisfied, state it like this:
Scope complete.
File: product/scopes/<feature>-<date>.md ✓
What's built: <N user-visible behaviours listed> ✓
What's NOT built: <M explicit exclusions listed by name> ✓
Acceptance criteria: <N testable Given/When/Then statements> ✓
Dependencies: <listed> / Risks: <listed or "none identified"> ✓
Estimate: <N days>, confidence: <level>, made against this scope document ✓
Assumptions: <listed — reviewed with both product and engineering> ✓
The estimate is invalid without the scope reference. A number without a scope is not an estimate.
Scope and estimate are not separable. An estimate made before scope is complete is not an estimate — it is a guess that will be treated as a deadline. The scope document is what makes the estimate defensible when the feature takes longer than the guess. Without it, "you said two weeks" is an argument that cannot be won.