Skip to content
Back to skills

Identify Feature Opportunities

ASecurity

Analyze the existing software surface and surrounding signals (code, issues, recent PRs, goals, roadmap) to generate and rank new feature opportunities that would add value. The bottom-up discovery counterpart to create-roadmap and create-goals, and the inverse of create-needs-assessment (which validates a given idea rather than proposing one). Use when the user says /identify-feature-opportunities, "what should we build next", "find feature ideas", "product opportunities", "feature gaps", "w...

  • 10 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
businessgobashreactgitapifrontendperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add tomzx/agents --skill identify-feature-opportunities --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Identify Feature Opportunities?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Identify Feature Opportunities
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tomzx-identify-feature-opportunities/badge)](https://www.skillsdirectory.com/skills/tomzx-identify-feature-opportunities)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: identify-feature-opportunities
description: Analyze the existing software surface and surrounding signals (code, issues, recent PRs, goals, roadmap) to generate and rank new feature opportunities that would add value. The bottom-up discovery counterpart to create-roadmap and create-goals, and the inverse of create-needs-assessment (which validates a given idea rather than proposing one). Use when the user says /identify-feature-opportunities, "what should we build next", "find feature ideas", "product opportunities", "feature gaps", "what's missing", or wants a periodic discovery pass. Designed to run safely on a monthly schedule or on demand.
argument-hint: "[repository] [--create-issues N] [--limit N] [--focus <area>] [--since <YYYY-MM-DD>]"
allowed-tools: Bash(gh:*, ghx:*), Read, Glob, Grep, Write
---

TODAY=!`date +%Y-%m-%d`
REPO=!`git remote get-url origin 2>/dev/null | sed -E 's#.*[:/]([^/]+/[^/]+)(\.git)?$#\1#'`

# Identify Feature Opportunities

Surfaces **new** feature opportunities by reading the software as it actually exists today and the signals around it, then synthesizing concrete, evidenced ideas ranked by value and strategic fit. This is discovery: it proposes work that does not yet exist, unlike `prioritize-issues` (ranks existing issues), `check-issues-status` (finds done work), or `create-needs-assessment` (validates one proposed idea).

## The Core Problem This Solves

Roadmaps and backlogs fill up from incoming requests, but they rarely get a bottom-up re-derivation from the software itself. Capabilities get 80% built and abandoned, adjacent expansion paths go unnoticed, repeated issue themes never get generalized into a feature, and stated goals sit with no corresponding code. This skill reads the codebase as evidence of what exists and proposes what is missing.

## Prerequisites

- Working directory is the root of a `git` repository
- `gh` CLI authenticated with read access to the target repository (for issue and PR signals)
- Read any files under `.sdlc/context/` (`project-overview.md`, `goals.md`, `roadmap.md`, `architecture.md`) for strategic context. These are optional but materially improve alignment scoring.
- If no argument is provided, operate on `$REPO` (derived from `origin`), then the current working directory.

## Inputs Synthesized

The skill reasons over five evidence sources. Each opportunity must cite at least one; strong opportunities cite two or more.

| Source | What it reveals |
|---|---|
| **Code surface** | CLI commands, API endpoints, UI screens, modules, config keys. What exists, what is stubbed, what is asymmetrically mature. |
| **`.sdlc/context/`** | Stated goals, roadmap initiatives, positioning. Used to score alignment and to find goals with no backing code. |
| **Open + recent issues** | User pain and requests. Clusters of same-theme issues signal unmet need, not random bugs. |
| **Merged PR history** | Recent themes and velocity. Momentum in one area suggests adjacent expansion. |
| **README / docs** | Stated capabilities vs. actual. Positioning reveals the product category and its expected feature set. |

## Opportunity Dimensions

Opportunities are derived from seven recurring patterns. Scan for each.

| Dimension | Signal in the code / signals | Example opportunity |
|---|---|---|
| **Surface gaps** | `TODO`/`FIXME`/`stub`/`NotImplemented`, feature flags wired but unused, config keys with no implementation, endpoints that error or return placeholder data | "The `/export` endpoint returns 501; implement CSV export." |
| **Usage asymmetry** | A rich subsystem next to a thin one. Create exists but no list/show; write but no read; sync but no async; one resource type fully built, a sibling resource half-built | "Orders have full CRUD; refunds support create only. Add list, show, update." |
| **Adjacent expansion** | Natural X→Y capability extensions: CRUD→bulk, API→webhooks, manual→automation, CLI→API, sync→async/streams, single-tenant→multi-tenant | "The API has no outbound webhooks; add event delivery so integrations react instead of poll." |
| **Issue theme clusters** | Three or more open issues around the same theme (exports, integrations, auth, performance) | "Four open issues ask for different export formats; build one export framework." |
| **Roadmap/code gaps** | A roadmap initiative or goal with no corresponding feature directory or code | "Roadmap lists 'internationalization' for Q3; there is no i18n code yet. Start it." |
| **Adoption blockers** | Missing foundational capability that limits who can use the software: no auth, no rate limiting, no multi-tenancy, no offline mode, no audit log | "No authentication; every endpoint is public. Add auth to allow enterprise use." |
| **Comparative gaps** | README positioning implies a category whose standard capabilities are absent here | "Positioned as a 'data pipeline tool' but has no scheduling or retry. Add a scheduler." |

## Scoring

Each opportunity is scored so the output is ranked, not just listed. Reuse the RICE framing from `prioritize-issues`, extended with an alignment multiplier.

```
score = (Reach × Impact × Confidence × Alignment) / Effort
```

| Factor | Scale | Meaning |
|---|---|---|
| Reach | 1–10 | How many users / callsites are affected per period |
| Impact | 1–5 | Effect on the product goal (1=minimal, 5=massive) |
| Confidence | 0.5–1.0 | Strength of the evidence cited (code signal > issue cluster > inference) |
| Alignment | 0.5–1.5 | Fit with `.sdlc/context/goals.md` and `roadmap.md` (1.0 = neutral, 1.5 = directly on a stated initiative, 0.5 = off-strategy) |
| Effort | 0.5–5 | Person-weeks of work required |

When `.sdlc/context/` is absent, Alignment defaults to 1.0 for all opportunities and a note is added to the report.

## Flags

- `--create-issues N` — file GitHub issues for the top N opportunities via `/create-issue`. Off by default (report-only). Each issue links back to this report.
- `--limit N` — maximum opportunities to surface (default 20). The report shows the top N by score.
- `--focus <area>` — restrict the scan to one area (e.g., `api`, `ui`, `cli`, a module path or a roadmap initiative slug). This narrows the code surface scanned.
- `--since <YYYY-MM-DD>` — only consider issues and PRs from this date forward when reading signals (default: last 90 days). Useful for a focused recent-signal pass.

## Dedup (makes re-runs idempotent and safe to schedule)

Before surfacing an opportunity, check it is not already tracked:

1. Read the most recent prior report at `.sdlc/feature-opportunities-*.md`. Opportunities carried over keep their original ID and are marked `recurring` with the first-seen date, not re-proposed as new.
2. Search open issues for overlapping requests:
   ```
   gh search issues --repo <repo> --state open --limit 50 "<keyword>"
   ```
   If an open issue already requests the capability, link it and mark the opportunity `requested: #N` rather than proposing it fresh.
3. Carry forward the opportunity ID sequence from the prior report so numbering is stable across runs.

This makes monthly scheduled runs low-noise: only genuinely new opportunities appear as new rows.

## Steps

### 1. Resolve scope and read context

Resolve the repository from `$1`, then `$REPO`, then the current directory. Read `.sdlc/context/` files that exist. Record whether goals/roadmap are present (they govern Alignment scoring). Apply `--focus` if given.

### 2. Map the code surface

Enumerate the actual capability surface. Use the language-appropriate discovery:

- **CLI**: commands and subcommands, flags, `--help` output
- **API**: routes/endpoints (grep for route decorators: `@app.route`, `@router`, `app.get`, handlers), request/response schemas
- **UI**: screens, pages, routes (if a frontend is present)
- **Modules**: top-level packages and their public exports
- **Config**: keys, feature flags, environment variables

```
grep -rEn "TODO|FIXME|stub|NotImplemented|not implemented|501|placeholder" --include="*.py" --include="*.ts" --include="*.go" --include="*.js" .
```

Record each capability and its maturity (full / partial / stub).

### 3. Read issue and PR signals

Pull the last 90 days (or `--since`) of issues and merged PRs:

```
gh search issues --repo <repo> --state open --limit 100 --json number,title,labels,createdAt
gh search prs --repo <repo> --state closed --merged --limit 100 --json number,title,mergedAt
```

Group open issues by theme (label, keyword, or inferred topic). Any cluster of 3+ same-theme issues becomes an "issue theme cluster" opportunity candidate.

### 4. Derive opportunities

Apply the seven Opportunity Dimensions to the evidence collected. For each candidate opportunity, record:

- The dimension it came from
- The concrete evidence (file:line, issue numbers, roadmap initiative)
- A one-sentence opportunity statement (the value to the user, not the implementation)
- RICE + Alignment scores

### 5. Dedup against prior reports and open issues

Run the Dedup checks. Drop or annotate candidates already tracked. Assign stable IDs continuing the sequence from the prior report.

### 6. Rank and select

Sort by score descending. Apply `--limit`. Group by dimension in the output for readability, but order groups by their top opportunity's score.

### 7. Write the report

Write to `.sdlc/feature-opportunities-<TODAY>.md` (repo only; never mirrored to `SDLC_DIR`). Use the Output Format below.

### 8. Optional issue creation

If `--create-issues N` was passed, file the top N via `/create-issue`. Each issue body cites the evidence and links back to this report. Use a `feature-opportunity` label (create it if absent). Do not file issues without the flag.

## Output Format

```markdown
---
date: "<TODAY>"
repository: "<repo>"
scope: "<focus or whole project>"
since: "<signal window>"
goals_present: <true|false>
status: complete
---

# Feature Opportunities — <repo>

**Date:** <TODAY>
**Scope:** <whole project | focus area>
**Signals window:** issues/PRs since <date>
**Strategic context:** goals.md <present|absent>, roadmap.md <present|absent>

## Summary

- Opportunities surfaced: N (M new, K recurring, L already requested)
- Top dimension: <dimension>
- Top score: <score> — <opportunity title>

## Ranked Opportunities

| Rank | ID | Opportunity | Dimension | Evidence | R | I | C | A | Effort | Score | Status |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | FO-7 | Add outbound webhooks for order events | Adjacent expansion | `src/api/orders/*`; PR #88 momentum | 8 | 5 | 0.9 | 1.5 | 3 | 18.0 | new |
| 2 | FO-3 | Implement CSV/JSON export (endpoint 501) | Surface gap | `src/api/export.py:42` returns 501; issues #12 #31 #44 | 7 | 4 | 1.0 | 1.0 | 2 | 14.0 | requested: #12 |
| 3 | FO-8 | Start i18n work (roadmap Q3) | Roadmap/code gap | roadmap.md "internationalization"; no i18n code | 6 | 4 | 0.8 | 1.5 | 4 | 7.2 | new |

## By Dimension

### Adjacent expansion (N)
- **FO-7 — Add outbound webhooks for order events**
  - **Value:** Integrations react to events instead of polling.
  - **Evidence:** `src/api/orders/*` is the most active subsystem (PR #88, #91); no webhook delivery code exists.
  - **Alignment:** Directly serves roadmap initiative "platform integrations".
  - **Suggested next step:** `/create-needs-assessment` (validate delivery semantics before building).

### Surface gaps (N)
...

## Recurring (carried over from prior runs)

| ID | Opportunity | First seen | Status |
|---|---|---|---|
| FO-2 | Add bulk operations to refunds API | 2026-06-03 | recurring (still open) |

## Already requested (not re-proposed)

| Opportunity | Open issue |
|---|---|
| Dark mode | #15 |
| SSO login | #22 |

## Recommended Next Steps

| Rank | Opportunity | Next step |
|---|---|---|
| 1 | FO-7 | `/create-needs-assessment` then `/create-issue` |
| 2 | FO-3 | `/create-issue` (evidence is strong, skip needs-assessment) |
| 3 | FO-8 | `/create-roadmap` (strategic, not immediate) |
```

## Scheduling (Monthly Cadence)

This skill is designed to run safely unattended on a schedule. Properties that make this safe:

- **Read-only by default.** No commits, no PRs, no pushes unless `--create-issues` is passed.
- **Idempotent.** Stable opportunity IDs, dedup against prior reports and open issues, so monthly runs only surface genuinely new opportunities.
- **Bounded output.** `--limit` caps the report size.
- **No side effects on the codebase.** Writes only to `.sdlc/feature-opportunities-<date>.md`.

Recommended cadence: **monthly**. Feature discovery does not need to be weekly; the surface and signals change on a sprint-to-month timescale.

Scheduling options (same as `improve-codebase`):

- **Paperclip routine:** create a routine with a monthly cron trigger (e.g., `0 9 1 * *` for the 1st of each month at 09:00) whose execution instructs the agent to run `/identify-feature-opportunities`.
- **GitHub Actions:** a monthly schedule that invokes the agent CLI with `/identify-feature-opportunities` (report-only) and commits the report, or opens issues with `--create-issues 3`.
- **Manual:** run `/identify-feature-opportunities` at the start of each month as input to `/create-roadmap` or `/start-month`.

Pair naturally with `/start-month` (discovery feeds monthly planning) and `/create-roadmap` (opportunities become roadmap candidates).

## Relationship to Other Skills

| Skill | Relationship |
|---|---|
| `create-needs-assessment` | Validates one proposed idea. This skill *generates* the ideas to validate. Pipeline: identify-feature-opportunities → create-needs-assessment → create-requirements. |
| `create-roadmap` / `create-goals` | Top-down strategy. This is the bottom-up discovery that feeds them. |
| `prioritize-issues` | Ranks existing issues. This proposes *new* work not yet in the backlog. |
| `check-issues-status` | Finds already-implemented issues to close. This finds unbuilt capabilities to open. Opposite directions of backlog hygiene. |
| `create-issue` | Consumed by `--create-issues` to file the top opportunities. |
| `select-issue` | Operates on the prioritized backlog this skill helps populate. |
| `customer-research` | Gathers external (customer) signals. This synthesizes internal (code + issue) signals. Complementary. |
| `audit-sdlc` | Looks *inward* at code and architecture quality (organized by the ISO/IEC 25010 model). This looks *outward* at new value to add. |

## Example Usage

**Scenario 1: Monthly discovery pass (the default)**
```
/identify-feature-opportunities
```
Reads the whole codebase, last 90 days of issues/PRs, and `.sdlc/context/`. Surfaces 12 opportunities ranked by score. Writes `.sdlc/feature-opportunities-2026-08-03.md`. No issues filed.

**Scenario 2: Discovery that files the top 3**
```
/identify-feature-opportunities --create-issues 3
```
Same scan, then files the top 3 as GitHub issues labeled `feature-opportunity`, each linking back to the report.

**Scenario 3: Focused API pass**
```
/identify-feature-opportunities --focus api
```
Restricts the surface scan to the API layer. Useful when the API is the product's main growth area.

**Scenario 4: First run, no .sdlc context yet**
```
/identify-feature-opportunities
```
Goals and roadmap absent, so Alignment defaults to 1.0 for all. Report notes that strategic context was missing and recommends running `/create-goals` and `/create-roadmap` to improve future scoring.

**Scenario 5: Quarterly signal window**
```
/identify-feature-opportunities --since 2026-04-01
```
Only considers issues and PRs from Q2. Useful for a quarterly planning review.

## Useful Commands Reference

| Command | Description |
|---|---|
| `gh search issues --repo <repo> --state open --limit 100 --json number,title,labels,createdAt` | Open issue signals |
| `gh search prs --repo <repo> --state closed --merged --limit 100 --json number,title,mergedAt` | Recent merged PR themes |
| `gh search issues --repo <repo> --state open "<keyword>"` | Dedup: is this already requested? |
| `grep -rEn "TODO\|FIXME\|NotImplemented\|501\|stub" --include="*.py" .` | Surface-gap scan |
| `grep -rEn "@(app\|router)\.(get\|post\|put\|delete\|patch)" --include="*.py" .` | API surface enumeration |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…