adr-creator
Create Architecture Decision Records (ADRs) documenting significant technical decisions for the FF Analytics platform. This skill should be used when making architectural choices, evaluating alternatives for data models or infrastructure, documenting trade-offs, or when the user asks "should we use X or Y approach?" Guides through the ADR creation workflow from context gathering to documentation.
Best use case
adr-creator is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Create Architecture Decision Records (ADRs) documenting significant technical decisions for the FF Analytics platform. This skill should be used when making architectural choices, evaluating alternatives for data models or infrastructure, documenting trade-offs, or when the user asks "should we use X or Y approach?" Guides through the ADR creation workflow from context gathering to documentation.
Teams using adr-creator should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/adr-creator/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How adr-creator Compares
| Feature / Agent | adr-creator | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Create Architecture Decision Records (ADRs) documenting significant technical decisions for the FF Analytics platform. This skill should be used when making architectural choices, evaluating alternatives for data models or infrastructure, documenting trade-offs, or when the user asks "should we use X or Y approach?" Guides through the ADR creation workflow from context gathering to documentation.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# ADR Creator
Create Architecture Decision Records (ADRs) that document significant technical decisions for the Fantasy Football Analytics project following the established ADR format and workflow.
## When to Use This Skill
Use this skill proactively when:
- Making architectural decisions (data model, infrastructure, tooling)
- User asks "should we use X or Y?" or "what's the best approach for Z?"
- Evaluating alternatives with trade-offs
- Documenting decisions that will impact future development
- Creating records referenced by strategic-planner skill
- Superseding or updating previous ADRs
## ADR Purpose
ADRs serve as **permanent records of significant technical decisions**, capturing:
1. **Context** - Why the decision was needed
2. **Alternatives** - What options were considered (and why rejected)
3. **Decision** - What was chosen and how to implement it
4. **Consequences** - Trade-offs, benefits, and risks
**Benefits:**
- Future developers understand "why" not just "what"
- Prevents re-litigating settled decisions
- Documents trade-offs for later review
- Creates institutional memory
## ADR Categories
The FF Analytics project uses ADRs for:
1. **Data Model Decisions** (e.g., ADR-007: Separate fact tables, ADR-009: 2×2 stat model)
2. **Infrastructure Choices** (e.g., ADR-004: GitHub Actions, ADR-006: GCS storage)
3. **Data Quality Policies** (e.g., ADR-005: Server-side copy, ADR-008: Idempotency)
4. **Identity & Conformance** (e.g., ADR-010: mfl_id canonical, ADR-011: Team conformance, ADR-014: Pick identity)
## ADR Creation Workflow
### Step 1: Identify Decision Context
**Ask these questions:**
- What problem needs solving?
- What constraints exist (technical, business, time)?
- Is this a new decision or updating an existing ADR?
- Does this supersede a previous ADR?
- What's the scope (data model, infrastructure, process)?
**Decision Scope Examples:**
**HIGH - Needs ADR:**
- Choosing between DuckDB vs PostgreSQL for local development
- Deciding on SCD Type 1 vs Type 2 for player dimension
- Selecting canonical player ID (mfl_id vs gsis_id)
- Establishing batch vs streaming architecture
**LOW - Does NOT need ADR:**
- Naming a specific model or column
- Minor code refactoring
- Formatting/style choices covered by linting
- Tactical bug fixes
**Rule of thumb:** If the decision impacts multiple components or will be referenced in future work, create an ADR.
### Step 2: Research Alternatives
**Thoroughly evaluate options:**
1. **List all viable alternatives** (aim for 2-4 options)
2. **Research each option**:
- Technical feasibility
- Implementation complexity
- Performance implications
- Cost (development time, runtime, maintenance)
- Compatibility with existing architecture
3. **Consult existing ADRs** for precedents or conflicts
4. **Prototype if needed** (for high-risk decisions)
**Example (from ADR-010):**
| Alternative | Pros | Cons | Verdict |
|-------------|------|------|---------|
| gsis_id canonical | NFL authoritative | NFL-specific, couples to nflverse | Rejected |
| mfl_id canonical | Platform-neutral, nflverse provides crosswalk | Indirect (via crosswalk) | **Chosen** |
| Generate synthetic ID | Complete control | No provider alignment, complex migration | Rejected |
### Step 3: Draft ADR
**Use the template** from `assets/adr_template.md`:
1. **Get next ADR number**: Run `scripts/get_next_adr_number.py`
```bash
cd .claude/skills/adr-creator
python scripts/get_next_adr_number.py # Returns ADR-015, ADR-016, etc.
```
2. **Create file**: `docs/adr/ADR-{NNN}-{slug}.md`
- **Number**: Zero-padded 3 digits (ADR-004, ADR-015)
- **Slug**: Kebab-case summary (e.g., `mfl-id-canonical-identity`)
3. **Fill all sections completely**:
#### Context Section
- **Problem statement**: Clearly define what needs deciding
- **Current state**: Describe relevant existing architecture
- **Constraints**: Technical, business, or timeline limitations
- **Stakeholders**: Who is affected by this decision?
**Good context example:**
> "The platform integrates 19+ fantasy data providers, each using different player IDs. We need a canonical player_id for dim_player that enables identity resolution across all providers while remaining stable as providers are added/removed."
#### Decision Section
- **Be specific and actionable**: Not "use DuckDB" but "use DuckDB for local development with External Parquet materialization for large models"
- **Include technical details**: Schemas, configurations, implementation approach
- **Reference code/SQL if helpful**: Concrete examples clarify intent
**Good decision example (from ADR-010):**
> "Use nflverse's `mfl_id` as the canonical `player_id` throughout the dimensional model. Create `dim_player_id_xref` crosswalk seed table mapping mfl_id to 19 provider-specific IDs."
#### Consequences Section
- **Positive consequences**: What benefits does this provide?
- **Negative consequences**: What trade-offs or risks?
- **Mitigation strategies**: How to address the negatives?
Be honest about trade-offs. Example:
> **Negative:** Requires join to crosswalk table for provider ID lookup
> **Mitigation:** Crosswalk is small (~5K rows), joins are fast; SCD Type 1 so no history bloat
### Step 4: Review & Refine
**Self-review checklist:**
- [ ] Context is clear and complete (someone unfamiliar with project understands the problem)
- [ ] Decision is specific and actionable (implementation team knows what to build)
- [ ] Alternatives are documented with rationale for rejection
- [ ] Consequences are realistic (not overly optimistic)
- [ ] References are complete (links to specs, related ADRs, external docs)
- [ ] Status is correct (Draft for new, Accepted after implementation, Superseded if replaced)
**Verification:**
Does this ADR answer:
1. **Why** did we make this decision? (Context)
2. **What** are we doing? (Decision)
3. **What else** did we consider? (Alternatives in Context)
4. **What** are the implications? (Consequences)
### Step 5: File & Update Index
**Filing:**
1. **Save ADR**: `docs/adr/ADR-{NNN}-{slug}.md`
2. **Update index**: Add entry to `docs/adr/README.md`
3. **Link from specs**: Reference ADR from SPEC-1 or other specs (if applicable)
4. **Link related ADRs**: Update superseded ADRs or related decisions
**Example index entry:**
```markdown
- [ADR-015: DuckDB External Parquet for Large Marts](ADR-015-duckdb-external-parquet.md) - **Accepted** (2024-11-08)
```
**Superseding previous ADRs:**
When ADR supersedes an older decision:
1. **Update old ADR status**: Change to "Superseded by ADR-{NNN}"
2. **Reference in new ADR**: Add "Supersedes: ADR-{XXX}" to frontmatter
3. **Explain why**: In Context section, explain why original decision no longer applies
## ADR Lifecycle
ADRs progress through statuses:
1. **Draft** - Initial proposal, under discussion
2. **Accepted** - Decision approved and being implemented
3. **Superseded** - Replaced by newer ADR (include ADR number)
4. **Deprecated** - No longer relevant (explain why)
**Update status as decisions evolve:**
- Draft → Accepted when implementation begins
- Accepted → Superseded when replaced by newer decision
- Accepted → Deprecated if approach is abandoned (with explanation)
## Best Practices
### Be Specific
**Bad:** "Use DuckDB for better performance"
**Good:** "Use DuckDB with External Parquet materialization for mart models >1M rows to reduce dev.duckdb file size and improve query performance via columnar scans"
### Document "Why Not" for Rejected Alternatives
Don't just state the decision - explain why alternatives were rejected:
**Example:**
> **Alternative: PostgreSQL**
>
> - ✅ Mature, widely used, excellent ecosystem
> - ❌ Requires separate server process (complexity for local dev)
> - ❌ No native Parquet support (needs external tools)
> - **Verdict:** Rejected due to local development complexity
### Include Concrete Examples
When possible, show actual code/SQL/schemas:
```sql
-- dim_player_id_xref (crosswalk seed)
CREATE TABLE dim_player_id_xref (
player_id VARCHAR PRIMARY KEY, -- mfl_id (canonical)
gsis_id VARCHAR, -- NFLverse
sleeper_id INTEGER, -- Sleeper
...
)
```
### Link Liberally
Reference:
- Related ADRs (supersedes, complements, conflicts)
- Specs (SPEC-1, feature specs)
- External resources (documentation, blog posts, papers)
- Code locations (when decision manifests in specific files)
### Keep Them Immutable (Mostly)
Once accepted, ADRs should rarely change. If decision evolves:
- **Small clarifications:** Edit in place (note date of edit)
- **Major changes:** Create new ADR that supersedes the old one
## Integration with Other Skills
- **strategic-planner**: Specs reference ADRs for architectural decisions
- **sprint-planner**: Sprint tasks implement decisions from ADRs
- **dbt-model-builder**: Model designs follow patterns established in ADRs (e.g., ADR-009: 2×2 model)
**Workflow:**
1. **strategic-planner** creates SPEC-1 (high-level architecture)
2. **adr-creator** documents key technical decisions from spec
3. **sprint-planner** breaks ADR implementations into tasks
4. Implementation references ADRs for guidance
## Resources
### assets/
- `adr_template.md` - Complete ADR template with all sections
### references/
- `example_adr.md` - Real ADR from project (ADR-010: mfl_id canonical identity)
### scripts/
- `get_next_adr_number.py` - Returns next available ADR number
- `create_adr.py` - Interactive ADR creation helper (use this to create new ADRs)
## Common Patterns
### Data Model ADRs
**Pattern:** Dimensional modeling decisions (facts, dimensions, grain, SCDs)
**Examples:**
- ADR-007: Separate fact tables per measure type
- ADR-009: 2×2 stat model (actuals vs projections, real-world vs fantasy)
- ADR-010: mfl_id canonical player identity
- ADR-014: Pick identity resolution
**Typical structure:**
- Context: Data model requirements, query patterns
- Decision: Specific schema design with SQL examples
- Consequences: Query complexity, join performance, storage
### Infrastructure ADRs
**Pattern:** Tooling and platform choices
**Examples:**
- ADR-004: GitHub Actions for Sheets sync
- ADR-006: GCS for cloud storage
**Typical structure:**
- Context: Infrastructure requirements, constraints
- Decision: Tool selection with configuration details
- Consequences: Cost, maintenance, learning curveRelated Skills
advanced-skill-creator
Meta-skill that generates domain-specific skills using advanced reasoning techniques. PROACTIVELY activate for: (1) Create/build/make skills, (2) Generate expert panels for any domain, (3) Design evaluation frameworks, (4) Create research workflows, (5) Structure complex multi-step processes, (6) Instantiate templates with parameters. Triggers: "create a skill for", "build evaluation for", "design workflow for", "generate expert panel for", "how should I approach [complex task]", "create skill", "new skill for", "skill template", "generate skill"
advanced-memory-skill-creator
Use when planning, scaffolding, validating, or packaging Claude skills inside Advanced Memory MCP.
action-creator
Creates user-specific one-click action templates that execute email operations when clicked in the chat interface. Use when user wants reusable actions for their specific workflows (send payment reminder to ACME Corp, forward bugs to engineering, archive old newsletters from specific sources).
acceptance-criteria-creator
Create acceptance criteria creator operations. Auto-activating skill for Enterprise Workflows. Triggers on: acceptance criteria creator, acceptance criteria creator Part of the Enterprise Workflows skill category. Use when working with acceptance criteria creator functionality. Trigger with phrases like "acceptance criteria creator", "acceptance creator", "acceptance".
ac-handoff-creator
Create handoff packages for session transitions. Use when ending sessions, preparing for continuation, saving session state, or creating resumable context.
meta:cli-feature-creator
CLI Feature Creator wizard for adding new aaa CLI commands. Use when user asks to "add aaa command", "create CLI feature", "add CLI command", or needs to extend the aaa CLI with new functionality.
a-b-test-config-creator
A B Test Config Creator - Auto-activating skill for ML Deployment. Triggers on: a b test config creator, a b test config creator Part of the ML Deployment skill category.
skill-creator
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
slack-gif-creator
Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives. This skill applies when users request animated GIFs or emoji animations for Slack from descriptions like "make me a GIF for Slack of X doing Y".
ontopo
An AI agent skill to search for Israeli restaurants, check table availability, view menus, and retrieve booking links via the Ontopo platform, acting as an unofficial interface to its data.
chrome-debug
This skill empowers AI agents to debug web applications and inspect browser behavior using the Chrome DevTools Protocol (CDP), offering both collaborative (headful) and automated (headless) modes.
lets-go-rss
A lightweight, full-platform RSS subscription manager that aggregates content from YouTube, Vimeo, Behance, Twitter/X, and Chinese platforms like Bilibili, Weibo, and Douyin, featuring deduplication and AI smart classification.