adr-documentation
Architecture Decision Records (ADR) documentation practice. Use when documenting architectural decisions, recording technical trade-offs, creating decision logs, or establishing architectural patterns. Trigger keywords - "ADR", "architecture decision", "decision record", "trade-offs", "architectural decision", "decision log".
What this skill does
# ADR Documentation ## Overview ### What are ADRs? Architecture Decision Records (ADRs) are lightweight documents that capture important architectural decisions along with their context and consequences. They serve as a historical record of why certain choices were made, helping teams avoid revisiting settled debates and providing context for future developers. **Key characteristics:** - **Immutable**: Once accepted, ADRs are rarely modified (supersede instead) - **Context-rich**: Capture the environment and constraints at decision time - **Outcome-focused**: Document what was decided and why - **Alternative-aware**: Show what options were considered and rejected ### Why Document Decisions? **Context Preservation:** - Future team members understand *why* things are the way they are - Avoid "we've always done it this way" without knowing the reason - Preserve institutional knowledge across team changes **Onboarding:** - New developers can read ADR history to understand system evolution - Reduces repetitive explanations of architectural choices - Provides learning path through project decisions **Avoiding Repeat Mistakes:** - Document why certain approaches were rejected - Prevent re-proposing failed solutions - Learn from past trade-offs **Alignment:** - Create shared understanding across team - Resolve disagreements with documented rationale - Enable asynchronous decision-making ### When to Write an ADR Write an ADR when: - **Significant architectural choices**: Microservices vs monolith, event-driven vs request/response - **Technology selections**: Database choice, framework adoption, language decisions - **Pattern decisions**: State management approach, authentication strategy, error handling patterns - **Breaking changes**: API redesigns, data model changes, migration strategies - **Performance-critical decisions**: Caching strategies, optimization approaches, scalability patterns - **Security-related choices**: Authentication methods, encryption strategies, access control models - **Infrastructure decisions**: Deployment strategy, hosting platform, CI/CD approach - **Dependency selections**: Major library choices, third-party service integrations **Don't write an ADR for:** - Minor implementation details - Temporary workarounds - Personal coding style preferences - Reversible low-impact choices ## ADR Structure ### Standard Format ```markdown # ADR-XXXX: [Short Title] ## Status [Proposed | Accepted | Deprecated | Superseded by ADR-YYYY] ## Date YYYY-MM-DD ## Context [Problem statement and environment] ## Decision [What was decided] ## Consequences [What results from this decision] ## Alternatives Considered [Other options evaluated] ## Related ADRs [Links to related decisions] ## References [External links and documentation] ``` ### Section Guidelines **Title:** - Format: `ADR-XXXX: Short Decision Title` - Be specific: "ADR-0012: Use PostgreSQL for Primary Database" - Not generic: "ADR-0012: Database Choice" **Status:** - **Proposed**: Under discussion, not yet accepted - **Accepted**: Decision is final and being implemented - **Deprecated**: No longer recommended but not replaced - **Superseded by ADR-YYYY**: Replaced by a newer decision **Date:** - Use ISO format: YYYY-MM-DD - Date of status change, not original proposal **Context:** - Describe the forces at play - Technical constraints - Business requirements - Team capabilities - Timeline pressures - Budget considerations - Example: "We need to store structured data with complex relationships. Team has limited database expertise. Must support 100k+ users within 6 months." **Decision:** - State clearly what was decided - Include scope and boundaries - Specify what is NOT included - Example: "We will use PostgreSQL as our primary database for all structured data. NoSQL solutions may be used for specific use cases (caching, session storage) but PostgreSQL is the default." **Consequences:** - **Positive**: What benefits we gain - **Negative**: What drawbacks we accept - **Neutral**: What trade-offs we're making Example: ```markdown ### Positive - Strong ACID guarantees for transactions - Rich query capabilities with SQL - Mature ecosystem and tooling ### Negative - Requires careful index management for performance - Scaling horizontally is more complex than NoSQL - Team needs PostgreSQL training ### Neutral - Need to establish backup/restore procedures - Must define connection pooling strategy ``` **Alternatives Considered:** - List 2-4 alternatives seriously evaluated - For each: Pros, Cons, Why rejected - Be fair to alternatives (avoid strawman arguments) **Related ADRs:** - Link to decisions that influenced this one - Link to decisions this one influences - Create a decision graph over time **References:** - Documentation links - Blog posts or articles that influenced decision - Benchmark results - Proof of concepts ## ADR Numbering and Naming ### Sequential Numbering Use zero-padded sequential numbers: - `ADR-0001`, `ADR-0002`, ..., `ADR-0010`, ..., `ADR-0100` - Four digits handles up to 9,999 ADRs (enough for most projects) - Don't skip numbers when superseding (new ADR gets next number) ### File Naming Format: `ADR-XXXX-short-title.md` Examples: - `ADR-0001-use-postgresql-database.md` - `ADR-0002-adopt-react-19-frontend.md` - `ADR-0003-implement-jwt-authentication.md` **Naming guidelines:** - Use lowercase - Use hyphens (not underscores or spaces) - Keep title short but descriptive - Include key technology/pattern name ### Location Recommended locations: - **Option 1**: `ai-docs/decisions/` (alongside other AI-focused docs) - **Option 2**: `docs/adr/` (standard documentation location) - **Option 3**: Root `adr/` directory (if ADRs are primary docs) **Choose consistently across project.** For Claude Code plugins: - Use `ai-docs/decisions/` to co-locate with CLAUDE.md and other AI docs - Makes ADRs easily discoverable by Claude ## When to Write an ADR ### Technology Adoption **Write an ADR when:** - Adopting a new framework or major library - Choosing between competing technologies - Upgrading to a new major version with breaking changes **Examples:** - ADR-0015: Migrate from Webpack to Vite - ADR-0023: Adopt TypeScript for Backend Services - ADR-0031: Use Bun Runtime Instead of Node.js ### Architectural Pattern Selection **Write an ADR when:** - Choosing architectural style (monolith, microservices, serverless) - Selecting state management approach - Defining API design patterns - Establishing error handling strategies **Examples:** - ADR-0008: Use Event-Driven Architecture for Order Processing - ADR-0012: Implement Repository Pattern for Data Access - ADR-0019: Adopt REST over GraphQL for Public API ### Breaking Changes **Write an ADR when:** - Making changes that break backward compatibility - Migrating data models - Redesigning core APIs - Changing authentication mechanisms **Examples:** - ADR-0025: Remove Legacy API v1 Endpoints - ADR-0033: Migrate from Sessions to JWT Tokens - ADR-0041: Change User ID from Integer to UUID ### Performance-Critical Decisions **Write an ADR when:** - Implementing caching strategies - Making database optimization choices - Selecting algorithms for hot paths - Deciding on async vs sync processing **Examples:** - ADR-0017: Implement Redis for Session Caching - ADR-0022: Use WebSockets for Real-Time Updates - ADR-0028: Adopt Background Job Queue for Heavy Processing ### Security-Related Choices **Write an ADR when:** - Choosing authentication methods - Implementing authorization strategies - Selecting encryption approaches - Defining security policies **Examples:** - ADR-0010: Use OAuth 2.0 with PKCE for Mobile Auth - ADR-0014: Implement Row-Level Security in PostgreSQL - ADR-0020: Adopt OWASP Guidelines for API Security ## ADR Lifecycle ### Proposal Phase **Creating a Proposal:** 1. Draft ADR with status "Proposed" 2. Share with team for feedback 3. Discuss in team meeting or async comments
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.