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`