Skills documentation-and-adrs

install
source · Clone the upstream repo
git clone https://github.com/TerminalSkills/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TerminalSkills/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/documentation-and-adrs" ~/.claude/skills/terminalskills-skills-documentation-and-adrs && rm -rf "$T"
manifest: skills/documentation-and-adrs/SKILL.md
source content

Documentation and ADRs

Overview

Document decisions, not just code. The most valuable documentation captures the why — the context, constraints, and trade-offs that led to a decision. Code shows what was built; documentation explains why it was built this way and what alternatives were considered.

Instructions

Architecture Decision Records (ADRs)

Write an ADR when:

  • Choosing a framework, library, or major dependency
  • Designing a data model or database schema
  • Selecting an authentication or API architecture strategy
  • Any decision that would be expensive to reverse

Store ADRs in

docs/decisions/
with sequential numbering:

# ADR-001: Use PostgreSQL for primary database

## Status
Accepted | Superseded by ADR-XXX | Deprecated

## Date
2025-01-15

## Context
[Key requirements and constraints that drove the decision]

## Decision
[What was decided and why]

## Alternatives Considered
[Each alternative with pros, cons, and reason for rejection]

## Consequences
[What follows from this decision]

ADR Lifecycle:

PROPOSED → ACCEPTED → (SUPERSEDED or DEPRECATED)

Don't delete old ADRs — they capture historical context. When a decision changes, write a new ADR that references and supersedes the old one.

Inline Documentation

Comment the why, not the what:

// BAD: Restates the code
// Increment counter by 1
counter += 1;

// GOOD: Explains non-obvious intent
// Rate limit uses a sliding window to prevent burst attacks at window edges
if (now - windowStart > WINDOW_SIZE_MS) {
  counter = 0;
  windowStart = now;
}

Don't leave TODO comments for things you should just do now. Don't leave commented-out code — git has history.

API Documentation

For public APIs, document with types:

/**
 * Creates a new task.
 * @param input - Task creation data (title required, description optional)
 * @returns The created task with server-generated ID and timestamps
 * @throws {ValidationError} If title is empty or exceeds 200 characters
 * @throws {AuthenticationError} If the user is not authenticated
 */
export async function createTask(input: CreateTaskInput): Promise<Task> {}

README Structure

Every project should cover:

  • One-paragraph description
  • Quick Start (clone, install, env, run)
  • Commands table (dev, test, build, lint)
  • Architecture overview with links to ADRs
  • Contributing guidelines

Changelog Maintenance

## [1.2.0] - 2025-01-20
### Added
- Task sharing: users can share tasks with team members (#123)
### Fixed
- Duplicate tasks appearing when rapidly clicking create button (#125)
### Changed
- Task list now loads 50 items per page (was 20) (#126)

Examples

When to Document vs When NOT to

Document:

  • Making a significant architectural decision
  • Choosing between competing approaches
  • Adding or changing a public API
  • Known gotchas that could trap future developers or agents

Don't document:

  • Obvious code that's self-explanatory
  • Throwaway prototypes
  • Comments that restate what the code says

Document Known Gotchas

/**
 * IMPORTANT: Must be called before the first render.
 * If called after hydration, causes a flash of unstyled content
 * because the theme context isn't available during SSR.
 * See ADR-003 for the full design rationale.
 */
export function initializeTheme(theme: Theme): void {}

Guidelines

Common Rationalizations

RationalizationReality
"The code is self-documenting"Code shows what, not why or what was rejected
"We'll write docs when the API stabilizes"APIs stabilize faster when you document them
"Nobody reads docs"Agents do. Future engineers do. Your future self does
"ADRs are overhead"A 10-min ADR prevents a 2-hour re-debate six months later

Red Flags

  • Architectural decisions with no written rationale
  • Public APIs with no documentation or types
  • README that doesn't explain how to run the project
  • No ADRs in a project with significant architectural choices

Verification

After documenting:

  • ADRs exist for all significant architectural decisions
  • README covers quick start, commands, and architecture overview
  • API functions have parameter and return type documentation
  • Known gotchas are documented inline where they matter
  • No commented-out code remains