awslabs / awslabs/aidlc-workflows

RFC: A first-party `product-discovery` plugin — new idea or existing product → Context Pack → design

Open
#652 3 comments 0 reactions 0 assignees View on GitHub
rfc
Dominant language
TypeScript
Stars
4.6k
Forks
827
Avg merge
1d 17h
Merged PRs (30d)
158

Description

### Summary

The highest-leverage failure in an ISV is upstream of engineering: **building the wrong thing, fast.** AI-DLC starts at `intent-capture` — it assumes someone already decided *what* to build. **AI-PDLC** is the product-team methodology that closes that gap (*"what's worth building?"* — Signal → Experiment → Steward, deliverable a **Context Pack**). This RFC proposes bringing it in-framework as **one comprehensive, first-party, standalone plugin (`plugins/product-discovery/`) with its own ideation stages and a dedicated product-discovery agent.** It **serves both a new idea and an existing product** via a source classifier (mirroring the `design` plugin's ground-up-vs-inherit fork), **reuses** the core `market-research` stage and `intent-backlog` artifact where they already overlap (no duplicate "research the market" stage), and produces a canonical **`context-pack`** that feeds AI-DLC Inception **and** the sibling `design` plugin — whose `design-framing` stage already consumes it. The two are **separate first-party plugins composed through one artifact, not merged.** Authored entirely under `plugins/product-discovery/`, copying the `test-pro` reference shape. I'd like to align on the approach before opening PRs (per CONTRIBUTING "start with an issue").

### Motivation

- **Discovery is out-of-framework today.** AI-PDLC lives as a facilitated workshop + loose prompts. Its Context Pack "feeds directly into AI-DLC's Inception phase" — but nothing in the framework produces one.
- **Works for a new idea OR an existing product.** A from-nothing idea needs deep research to shape it; an existing product with a backlog + a pile of support tickets needs signal synthesis, backlog classification, and a gap-check. One classifier routes both.
- **A real, machine-readable Context Pack** (personas, JTBD, acceptance criteria, edge cases, golden dataset, architectural constraints) — evidence-cited, not a slide deck.
- **It completes the chain.** product-discovery (what's worth building) → design (what it looks & feels like) → AI-DLC Construction (build it right). The design plugin was already built to consume `context-pack`.

### Detailed Proposal

One plugin, the `test-pro` shape. A **dedicated `product-discovery-agent`** leads every discovery stage; `aidlc-product-lead-agent` reviews the gates (#566 verdict); it collaborates with (does not replace) the core `aidlc-product-agent`.

**The source classifier — new idea vs existing product:**

| Branch | What the plugin does | Net-new vs core |
|---|---|---|
| **NEW IDEA** | Deep research (market perception / competitors / category / JTBD) → persona/JTBD synthesis → Context Pack | Deep research = **core `market-research`, reused**; plugin adds synthesis + assembly |
| **EXISTING PRODUCT** | Ingest + synthesize signals → classify backlog (value/risk/duplication) → gap-check → Context Pack | Signal/classification/gap = **new**; classification operates on **core `intent-backlog`, reused** |

Both converge on the same **`context-pack`**.

**New stages (all `plugin: product-discovery`, `phase: ideation`):**

| Stage | Branch | What it does | Produces |
|---|---|---|---|
| `product-discovery-intake` | both | new-vs-existing classifier + persona/JTBD anchor + question bank | `product-discovery-source`, `product-discovery-brief` |
| `product-discovery-signal-collection` | EXISTING (CONDITIONAL) | ingest + synthesize support tickets/telemetry/calls; frequency ≠ intensity | `product-discovery-signal-synthesis` |
| `product-discovery-backlog-classification` | EXISTING (CONDITIONAL) | value-creation / risk-mitigation / duplication, on the core `intent-backlog` | `product-discovery-classified-backlog` |
| `product-discovery-gap-check` | EXISTING (CONDITIONAL) | evidence with no ticket; gaps are hypotheses, PM decides | `product-discovery-gaps` |
| `product-discovery-context-pack` | both | assemble the canonical Context Pack; every claim cites a source | `context-pack` |

**Additive overlays (the only core touch-point, additive seam):** `contributions/ideation/market-research.md` adds `product-discovery-source` (`required:false`) to tailor the research lenses; `contributions/ideation/scope-definition.md` adds `product-discovery-gaps` + `product-discovery-classified-backlog` (`required:false`) so scope folds in the classified backlog + validated gaps. Riding #482, an install with no product-discovery run sees "absent by design."

**The `context-pack` handoff = the design offer:** the `product-discovery-context-pack` gate presents the pack and, on a UI intent, offers *"build a mockup? (branding → DESIGN.md → render)"* → routes into the `design` plugin's `design-framing` (which already consumes `context-pack`, `required:false`). If `design` isn't installed, the pack hands to Inception as normal.

**Sensor:** `signal-evidence` (`kind: deterministic`, `default_severity: advisory`) — flags Context Pack claims that cite no signal/research source. Advisory only.

### Alternatives Considered

## Scope / non-goals

- **In:** the standalone `product-discovery` plugin above; both branches; the `context-pack` deliverable; the design handoff.
- **Out / no change:** the orchestration engine, state machine, audit taxonomy (no new event), core stages (bar the two additive `consumes:` overlays), application code.
- **Not shipped:** the AI-PDLC *workshop* itself (facilitation, decks, blocks, share-backs) — this brings the *methodology's artifacts* in-framework, not the facilitated engagement.
- **`context-pack` naming:** the one intentionally-unprefixed artifact — the cross-methodology contract noun. Documented exception to the `-` prefix rule (no core collision; design's consume stays `required:false`).

## Delivery (one concern per PR, per CONTRIBUTING)

- **S1** — plugin skeleton + classifier + Context Pack: `plugin.json`, `product-discovery-agent`, `product-discovery-intake` + `product-discovery-context-pack`, the format/personas/research-lenses knowledge. Snaps into the design plugin's existing consume immediately. (Lands first.)
- **S2** — signal machinery (EXISTING branch): `product-discovery-signal-collection` + `signal-synthesis` knowledge.
- **S3** — classification + gap-check + overlays + sensor: `product-discovery-backlog-classification`, `product-discovery-gap-check`, the two `contributions/`, `signal-evidence`. Closes the loop into `scope-definition`.
- **S4** — the design handoff offer + `product-discovery-full` scope + end-to-end validation of the product-discovery → design chain.

Each PR meets the standard DoD (authored under `plugins/product-discovery/`, `package.ts --check` green across every harness incl. `dist/plugins/product-discovery/`, plugin-content tests + `t188-plugin-compose` green, version/CHANGELOG/README).

### Drawbacks

_No response_

### Additional Context

_No response_

Contributor guide

Open the contributing guide

Research direction

Read CONTRIBUTING and the test-pro reference shape first, then inspect the existing design plugin's context-pack consumer and the core market-research and intent-backlog stages. Use the S1–S4 delivery list to scope work into separate PRs, starting with plugins/product-discovery/plugin.json, the agent, intake, and context-pack stages. Done means the relevant package.ts --check, plugin-content tests, and t188-plugin-compose checks pass with the documented version, CHANGELOG, and README updates.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.