discovery · git:20260514.ca9e7a0 · 2026-05-14 · sha256 60dd6203ddd41655
discovery git:20260514.ca9e7a0A
Immutable. This exact content is served forever at /api/v1/blob/60dd6203ddd41655.
--- name: discovery description: Structured pre-design questioning to surface hidden constraints before any architecture decision is locked in. Forces the architect/auditor/reviewer to enumerate what they DON'T know before proposing. when_to_use: | Apply BEFORE producing architecture docs, audit findings, security plans: - architect, before writing ARCH-*.md - project-auditor, at the start of /audit - security-officer, before threat-modeling - l3-support, when triaging a new incident - regulated-reviewer, when classifying compliance scope - any reviewer who needs domain context the user hasn't given allowed-tools: Read, Grep, Glob, Bash(git:*), Bash(bd:*) paths: - "docs/**" - ".great_cto/**" - "README*" --- # Discovery — surface hidden constraints first The biggest cause of bad agent output is missing context. Before locking in a decision, enumerate what you don't know and surface it. ## The 7 discovery dimensions For any non-trivial request, walk through these and record findings in the report's "Context" section: ### 1. Who depends on this? - What other services / teams consume the thing you're changing? - Are there public consumers (open API, OSS users)? - Is there a deprecation path if you break compatibility? Grep for: `grep -rE "import.*<your-module>|require.*<your-module>"` in the repo and any sibling repos you have access to. ### 2. What's the scale today, what's it in 6 months? - Current traffic: requests/sec, queries/sec, MB/day, daily-active-users - Storage: rows in main tables, size on disk - Cost: monthly LLM spend, infra spend - 6-month projection: linear? exponential? unknown? If unknown, write: "scale unknown — request from user before proceeding." ### 3. What MUST not change? - Existing API contracts (backward compatibility window) - Database schema columns referenced by reporting / BI - File formats consumed by other tools - Regulatory commitments (audit log retention, SLA RPO/RTO) ### 4. What's the budget? - Monthly cost ceiling (LLM + infra) - Headcount: 1-person task vs cross-team effort - Calendar: "must ship by X" vs "best by Y" If unstated, default to "small project_size, 1-engineer-week, <$200/mo budget." Surface this default in the report so the user can correct. ### 5. What's the failure mode that matters? Ask: "If this feature breaks at 3am, what gets paged?" - Data loss → CRITICAL - Wrong answer to user → HIGH - Slow response → MEDIUM - Bad UX (cosmetic) → LOW The failure mode dictates investment level (e.g., do you need a canary? A circuit breaker? Just a feature flag?). ### 6. What's already been tried? - Search Beads: `bd search "<keyword>"` — has this been attempted before? - Search docs/decisions: any superseded ADR on this topic? - Search lessons.md: any past learning about this pattern? If past work exists, build on it. Don't redo it. ### 7. Who decides? - Is there a CTO sign-off needed (gate:plan, gate:ship)? - Is there a compliance reviewer required (PCI for fintech, HIPAA for healthcare)? - Does this need an RFC (multi-team decision)? ## Output A discovery section at the top of your report: ```markdown ## Context - **Consumers:** <list, or "unknown — TBD with user"> - **Scale:** <today, 6mo projection> - **Frozen contracts:** <list, or "none identified"> - **Budget:** <cost + time + people> - **Failure-mode tier:** Critical | High | Medium | Low - **Prior work:** <links to ADRs/lessons, or "none found"> - **Decision-makers:** <gate or RFC required> ``` ## When to skip - **nano project_size** — discovery is overhead. Skip and document that you skipped: "nano — discovery skipped per skill rules." - **Pure utility extraction** with no behaviour change — skip. - **Verbal bug-fix from user** with clear repro — skip. ## Common gotchas - **Don't assume.** If you write "I assume the user wants X", that assumption belongs in Context as a question, not as a fact. - **Don't outsource to user.** Discovery is YOUR job. Bring back as many answers as Glob/Grep/git can produce. Only ask the user for what code cannot tell you.