What must exist before work can progress?
DEPENDENCY MAP: SALES CRM & RFP
════════════════════════════════════════════════════════════
┌──────────┐
│ START │
└─────┬─────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Identity & │ │ Convex │ │ Industry │
│ Access Fix │ │ Permissions │ │ Dropdown │
│ ═══ HARD │ │ ═══ HARD │ │ ─── soft │
│ (22P02 fix) │ │ (rfp_answer │ │ (config) │
└──────┬───────┘ │ + ventures) │ └──────┬───────┘
│ └──────┬───────┘ │
│ │ │
▼ ▼ │
┌──────────────┐ ┌──────────────┐ │
│ App │ │ Answer │ │
│ Accessible │ │ Library │ │
│ (all users) │ │ Readable │ │
└──────┬───────┘ └──────┬───────┘ │
│ │ │
└────────┬───────┘ │
│ │
▼ │
┌──────────────┐ │
│ Sprint 0: │ │
│ Wire 3 Algos│ │
│ + Stripe │ │
│ 6 days │ │
└──────┬───────┘ │
│ │
▼ │
┌──────────────┐ │
│ Sprint 1: │ │
│ Seed Answer │ │
│ Library │ │
│ (1 real RFP)│ │
└──────┬───────┘ │
│ │
┌────────────┼────────────┐ │
│ │ │ │
▼ ▼ ▼ │
┌──────────┐ ┌──────────┐ ┌───────── ─┐ │
│ Sprint 2 │ │ Sprint 3 │ │ Sprint 4 │ │
│ Company │ │ Activity │ │ Data │ │
│ Entity │ │ Logging │ │ Quality │ │
└─────┬────┘ └─────┬────┘ └─────┬────┘ │
│ │ │ │
└────────────┼────────────┘ │
│ │
▼ │
┌──────────────┐ │
│ First Pilot │←───────────────┘
│ (real team) │
└──────┬───────┘
│
▼
┌──────────────┐
│ Kill Test: │
│ Deals created│
│ Weekly usage │
└──────┬───────┘
│
▼
┌────────┐
│ DONE │
└────────┘
─────── = Soft (can proceed with workarounds)
═══════ = HARD (cannot proceed without)
════════════════════════════════════════════════════════════
Classification
| Dependency | Type | Hard/Soft | Owner | Risk | Mitigation |
|---|---|---|---|---|---|
| Identity & Access fix | Infrastructure | HARD | Eng | High | 22P02: userId string cast to UUID. ClerkAuthAdapter maps correctly, role query uses wrong field. |
| Convex rfp_answer permissions | Infrastructure | HARD | Eng | Medium | Table-level read permission not granted to authenticated user role. Blocks 3 pages. |
| Convex ventures query | Infrastructure | HARD | Eng | Medium | Generic "Operation failed" — may be related to permissions. Blocks venture management. |
| Industry dropdown update | Configuration | Soft | Eng | Low | Add Construction, Infrastructure, Energy, Solar to enum. Config change only. |
| Sales Forecasting wiring | API | Soft | Eng | Low | Algorithm exists, page exists, wire server action. 1 day. |
| Compound Rate wiring | API | Soft | Eng | Low | Algorithm exists, analytics renders placeholder. 1 day. |
| RFP Type Detection wiring | API | Soft | Eng | Low | Algorithm exists, upload flow exists. 2 days. |
| Stripe webhooks | API | Soft | Eng | Medium | Backend complete, webhook handlers pending. 2 days. |
| Answer library seeding | Data | Soft | Wik+Eng | Medium | Needs first real RFP processed through full cycle. |
| Company entity | Schema | Soft | Eng | Low | New table + detail/list pages + relationship migration. |
Bottleneck → Dependency Link
From the Value Stream Map — each bottleneck maps to what blocks its fix:
| Bottleneck (value stream) | Fix | Blocked By |
|---|---|---|
| #1 Bid Prep (20-40h) | Answer library auto-fill | Auth fix (HARD) + Convex permissions (HARD) + library seeding |
| #2 Follow-up (21d wait) | Task management linked to deals | Auth fix (HARD) — task page exists, needs accessible app |
| #3 SME Review (1-3d) | Review Queue + My Queue | Convex permissions (HARD) — pages built, can't read rfp_answer |
| #4 Go/No-Go (1-3d) | Scoring checklist | Soft — qualification stage exists, UI gap only |
| #5 Receive (low wait) | RFP Type Detection | Soft — algorithm exists, needs wiring |
Critical Path
Identity Fix (1-2d) → Convex Permissions (0.5d) → Sprint 0: Wire Algos (6d) → Sprint 1: Seed Library (5d) = ~14 days
│
Sprint 2: Company Entity (5d) ─────────────────────────────────────────────────────────┤ (parallel after Sprint 1)
Sprint 3: Activity Logging (3d) ───────────────────────────────────────────────────────┤ (parallel after Sprint 1)
Sprint 4: Data Quality (2d) ───────────────────────────────────────────────────────────┘ (parallel after Sprint 1)
Minimum to first pilot: ~14 engineering days (auth + permissions + algo wiring + library seeding)
Full cycle (all sprints): ~25 engineering days
The critical insight: Two HARD blockers (auth + permissions) gate everything. Fixing these two issues — likely 2-3 days of engineering — unblocks 49% of features that are already live.
Gate
Before moving to Capability Map:
- All dependencies identified and classified — YES (10 listed)
- Hard vs soft classification complete — YES (3 hard, 7 soft)
- Critical path identified — YES (14 days to first pilot)
- Every blocker has an owner and evidence — YES (22P02 error code, specific table names)
- Parallelization opportunities documented — YES (Sprints 2-4 parallel after Sprint 1)
- Key insight: 2-3 days of auth/permissions work unblocks 49% of live features
Context
- Value Stream Map — Previous: where does time die
- Capability Map — Next: what can we actually do
- Dependency Map Template — The empty pattern