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.

16 stars

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

$curl -o ~/.claude/skills/adr-creator/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/adr-creator/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/adr-creator/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How adr-creator Compares

Feature / Agentadr-creatorStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/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.

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 curve

Related Skills

action-creator

16
from diegosouzapw/awesome-omni-skill

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).

ac-handoff-creator

16
from diegosouzapw/awesome-omni-skill

Create handoff packages for session transitions. Use when ending sessions, preparing for continuation, saving session state, or creating resumable context.

workflow-creator

16
from diegosouzapw/awesome-omni-skill

Meta-skill for designing and creating Antigravity workflows. Interviews user, proposes optimal structure, checks for duplicates, and ensures workflows integrate with existing skills.

skills-creator

16
from diegosouzapw/awesome-omni-skill

Creates new Claude Code skills in the .claude/skills/ directory. Specializes in designing well-structured, effective skills through thorough requirements gathering. Use when the user wants to create a new skill, command, agent, or automation.

skill-creator

16
from diegosouzapw/awesome-omni-skill

Create new skills following a structured 4-phase workflow. Use when you need to build reusable agent skills with proper validation.

Skill Builder / Creator

16
from diegosouzapw/awesome-omni-skill

Create high-quality skills with modular structure, progressive disclosure, and token-efficient design.

art-icon-creator

16
from diegosouzapw/awesome-omni-skill

This skill should be used when creating artistic icon variations from images. It generates 10 different greyscale icon styles from a single image source, automatically compressing to under 20KB with high contrast appearance. Supports both URL and local file inputs.

animation-creator

16
from diegosouzapw/awesome-omni-skill

CSS animation and transition creator. Generates optimized @keyframes, transitions, and transform sequences with performance best practices and motion accessibility. Use when adding animations, transitions, or micro-interactions.

Suno Song Creator

16
from diegosouzapw/awesome-omni-skill

This skill should be used when the user asks to "create a Suno prompt", "write a Suno song", "generate music with Suno", "help me with Suno", "make a song prompt", "create lyrics for Suno", "build a music prompt", or mentions Suno AI music generation. Provides comprehensive guidance for creating professional Suno prompts using advanced prompting strategies, structured formatting within 1000 character limit (NO blank lines between sections), parameter optimization, genre-specific techniques, interactive questioning with efficient project name collection, automated artist/song research via sub-agent (web fetching + pattern extraction), automatic file export to organized project directories, AI-slop avoidance for authentic human-centered lyrics, copyright-safe style descriptions that avoid artist/album/song names, character counting utilities for accurate verification, and optional independent quality review via sub-agent for professional assessment.

subagents-creator

16
from diegosouzapw/awesome-omni-skill

Guide for defining and using Claude subagents effectively. Use when (1) creating new subagent types, (2) learning how to delegate work to specialized subagents, (3) improving subagent delegation prompts, (4) understanding subagent orchestration patterns, or (5) debugging ineffective subagent usage.

skill-creator-ms

16
from diegosouzapw/awesome-omni-skill

Guide for creating effective skills for AI coding agents working with Azure SDKs and Microsoft Foundry services. Use when creating new skills or updating existing skills.

power-agent-creator

16
from diegosouzapw/awesome-omni-skill

This skill should be used when users want to create powerful AI agents comparable to Claude Code or sonph-code. It provides battle-tested system prompts, masterfully-crafted tool implementations, and the simple but powerful agent loop pattern. Use this skill when users ask to build coding agents, AI assistants with tools, or any autonomous agent that needs file operations, code execution, search, and task management capabilities. The key insight is that customization requires only ONE HumanMessage after the SystemPrompt.