Skip to Content
InternalDocsAdr002 Customer Agnostic Design

002 Customer Agnostic Design

Source: docs/adr/002-customer-agnostic-design.md

# ADR-002: Customer-Agnostic Core Design **Status:** Accepted **Date:** January 2025 **Decision Makers:** Dan Johnson --- ## Context RGL8R is being developed with two pilot customers: Wayfair (TRADE module) and KnifeCenter (SHIP module). During initial spec development, customer names were embedded in core artifacts including: - Schema enum values (`WAYFAIR_SCHEMA`) - Adapter folder structure (`adapters/wayfair/`, `adapters/knifecenter/`) - PRD configuration sections ("KnifeCenter-Specific Configuration") - API contract examples (`wayfair-catalog-2026-01.csv`) This creates risk of building a consulting engagement rather than a scalable product. --- ## Decision **Core artifacts must be customer-agnostic.** Customer names are permitted only in: 1. **Customer context folders** (`customers/KnifeCenter/`, `customers/Wayfair/`) 2. **Marketing/case study content** (website, pitch decks) 3. **Requirements capture docs** (addendums documenting customer-discovered needs) Core artifacts that must remain customer-agnostic: - Database schema (table names, enum values, column names) - API contracts (endpoints, payload structures) - UI components and feature names - Code architecture (folder structure, class names) - Configuration keys --- ## Current Violations | Location | Current | Target | Priority | |----------|---------|--------|----------| | Schema v1.9 | `upload_type = 'WAYFAIR_SCHEMA'` | `'SCHEMA_MULTI_ROW'` | P1 - Before schema freeze | | Tech Standards | `adapters/wayfair/`, `adapters/knifecenter/` | `adapters/catalog/` + tenant config registry | P2 - Before 3rd customer | | SHIP PRD v1.1 | "KnifeCenter-Specific Configuration" section | "Tenant Configuration Examples" | P2 - Next PRD edit | | API Contract v1.1 | `wayfair-catalog-*.csv` examples | `acme-catalog-*.csv` | P3 - Low priority | | Addendum filename | `phase1.5-wayfair-addendum.md` | `phase1.5-multi-component-sku-addendum.md` | P3 - Optional | --- ## Implementation ### Immediate (Don't Block MVP) - Accept current naming in frozen specs - Customer names in examples are illustrative, not structural ### Before Second Customer - Refactor upload_type enums to generic names - Update PRD config sections to use "Tenant A/B" examples ### Before Third Customer - Implement adapter registry pattern - Replace `adapters/{customer}/` with configurable parser modules - Add backlog story H.12 for this work --- ## Consequences ### Positive - Product can onboard new customers without code changes - Avoids impression of custom development - Cleaner codebase for future engineers/contractors ### Negative - Requires discipline during rapid development - Some refactoring needed before scaling ### Neutral - Customer context docs remain valuable for sales/support - Wayfair Addendum features implemented generically benefit all customers --- ## References - Schema v1.9: `specs/rgl8r-phase1-operational-schema-v1.9.md` - Tech Standards v1.0: `specs/rgl8r-tech-standards-v1.0.md` - SHIP PRD v1.1: `specs/rgl8r-ship-module-prd-v1.1.md` - Jira Backlog v1.1: `specs/rgl8r-phase1-jira-backlog-v1.1.md`