7.6 KiB
ADR-0005: Scouting Search Domain Baseline
Status
Accepted
Context
HoopScout v2 is moving from technical foundation decisions to product-domain decisions required before model, filter, and UI implementation. The next implementation prompts need a stable and explicit scouting search vocabulary so we do not conflate objective statistics with internal scouting interpretation.
The product intent is a scouting-first player search engine where users combine multiple dimensions to discover players. This is not a generic basketball encyclopedia.
Decision
1. Search purpose
The search system is defined as a player scouting search engine. Search dimensions are selected to support scouting workflows and shortlist creation, not comprehensive historical/statistical browsing.
2. Domain vocabulary and separation of concerns
Search dimensions are separated into distinct layers that must not be conflated:
- Position: standard on-court category (
PG,SG,SF,PF,C). - Role: tactical/scouting classification (for example
playmaker,3-and-D,point forward,rim protector,6th man). - Specialty: scouting tag layer (for example
ball handling,off ball,defense,intangibles,clutch,post,dunk).
Position is a categorical descriptor, role is tactical interpretation, and specialty is a flexible tagging layer. Future implementation must preserve this separation in model semantics, filtering semantics, and UI wording.
3. Data classification by search dimension
The following classification defines ownership and data realism.
| Dimension | Classification | MVP handling |
|---|---|---|
Position (PG/SG/SF/PF/C) |
Hybrid: often source-derived, may need normalization; can be manually overridden when source is inconsistent | In MVP; filterable |
| Role (listed tactical roles) | App-defined/internal taxonomy; assigned via internal scouting judgment; may be inferred from data but not treated as source-native fact | Deferred as mandatory filter; optional/manual enrichment in MVP |
| Specialty tags | App-defined/internal taxonomy; manually curated and optionally inference-assisted; not source-native | Deferred as mandatory filter; optional/manual enrichment in MVP |
| Age | Derived from source date-of-birth and reference date | In MVP; filterable |
| Height | Source-derived objective attribute; normalized units required | In MVP; filterable |
| Weight | Source-derived objective attribute; normalized units required | In MVP; filterable |
| Wingspan | Optional source-derived or manually curated enrichment; sparse in public sources | Not required in MVP; optional if present |
| Points per game | Source-derived objective per-game metric | In MVP; filterable |
| Assists per game | Source-derived objective per-game metric | In MVP; filterable |
| Steals per game | Source-derived objective per-game metric | In MVP; filterable |
| Turnovers per game | Source-derived objective per-game metric | In MVP; filterable |
| Blocks per game | Source-derived objective per-game metric | In MVP; filterable |
| eFG% | Source-derived if provided, otherwise calculated from source box score totals (derived but objective) | In MVP if available/computable |
| TS% | Source-derived if provided, otherwise calculated from source totals (derived but objective) | In MVP if available/computable |
| Plus/minus | Optional source-derived metric with context variance across competitions/sources | Deferred from MVP baseline; include only where source quality is acceptable |
| Offensive rating | Optional source-derived metric; not universally available/consistent | Deferred from MVP baseline |
| Defensive rating | Optional source-derived metric; not universally available/consistent | Deferred from MVP baseline |
4. MVP search scope decision
MVP search filters include:
- position
- per-game metrics: points, assists, steals, turnovers, blocks
- objective personal/physical attributes with practical availability: age, height, weight
- advanced percentages when available or reliably computable: eFG%, TS%
MVP does not require role, specialty, wingspan, plus/minus, offensive rating, or defensive rating as baseline filters.
These deferred dimensions are allowed as optional enrichment fields in MVP data ingestion/storage if available, but they are not required for a player to be searchable.
5. Data realism decisions for risk-prone dimensions
- Role: public source coverage is inconsistent and mostly interpretive; treat as internal/manual scouting classification in MVP.
- Specialty: public source coverage is not standardized; treat as internal/manual tagging in MVP.
- Wingspan: public coverage is sparse and uneven across leagues; treat as optional enrichment, not a required MVP field.
6. Flexibility for future taxonomy growth
Role and specialty taxonomies are repository-owned domain vocabularies. They must be extensible so new role labels and specialty tags can be added without changing the conceptual model.
Future implementation should assume:
- position remains a bounded standard set;
- role remains an app-defined tactical taxonomy that can expand;
- specialty remains an app-defined tag taxonomy that can expand.
7. Implementation guidance for future prompts
Future model/filter/UI prompts must assume:
- Search filters are split by semantic layer: position, role, specialty, objective metrics, physical characteristics.
- Position filters operate on normalized categorical values.
- Role and specialty are internal taxonomy-owned dimensions and may be absent for many players in early phases.
- Objective metrics and physical fields remain source-driven (or objectively derived from source stats) and should be treated differently from scouting classifications.
- Optional dimensions must not block ingestion or search eligibility when missing.
- UI wording should avoid presenting role/specialty as objective source facts.
Alternatives considered
A. Treat role and specialty as source-native fields in MVP
Rejected. This overstates source objectivity and creates data quality risk because these are primarily scouting interpretations.
B. Require all listed dimensions in MVP filters
Rejected. This increases delivery risk and couples MVP to low-availability fields (especially wingspan and certain advanced metrics).
C. Ignore role/specialty until much later
Rejected. Even if deferred as mandatory filters, role/specialty must be conceptually defined now to avoid model ambiguity and rework.
Trade-offs
- Pros: clear semantic boundaries, realistic MVP scope, lower ingestion risk, explicit taxonomy ownership.
- Cons: initial MVP filter set is narrower than full scouting ambition, and some high-value scouting dimensions are manual/optional at first.
Consequences
- Near-term implementation can proceed with objective, reliably available filters first.
- Role/specialty workflows will require internal curation processes and possibly reviewer/admin UX later.
- Data pipelines must support missing optional fields without breaking search.
- Future ADRs can refine role/specialty governance and metric computation standards without replacing this baseline separation.
Follow-up decisions needed
- Role taxonomy governance: who can define, merge, rename, or deprecate roles.
- Specialty taxonomy governance: naming rules, hierarchy policy (if any), and duplicate-tag handling.
- Normalization standards for height/weight units and age reference-date semantics.
- Metric computation and rounding policy for derived advanced stats (eFG%, TS%).
- Source quality policy for optional advanced metrics (plus/minus, offensive/defensive rating).
- Curation workflow for manual scouting classifications and auditability requirements.