| title | Architecture Decision Records (ADRs) | |||
|---|---|---|---|---|
| schema_type | common | |||
| status | published | |||
| owner | core-maintainer | |||
| purpose | Index of architecture decision records for this project. | |||
| tags |
|
This directory contains Architecture Decision Records (ADRs) that document important architectural and design decisions made in Python Libs.
An Architecture Decision Record (ADR) is a document that captures:
- The Decision: What architectural choice was made?
- The Context: Why was this decision needed? What problem were we solving?
- The Consequences: What are the trade-offs and implications?
- Alternatives: What other options were considered and why were they rejected?
ADRs serve as:
- Historical Record: Why decisions were made and when
- Knowledge Sharing: Helps new team members understand the architecture
- Decision Rationale: Documents the reasoning behind choices
- Future Reference: Helps when revisiting decisions
Write an ADR when you need to document:
- Major architectural choices
- Technology selection decisions
- API design decisions
- Infrastructure decisions
- Dependency choices
- Testing strategies
- Any decision that impacts multiple components
All ADRs follow a consistent structure with YAML front matter. See adr-template.md for the complete template.
---
schema_type: adr # Always "adr"
title: "ADR-NNN: Short descriptive title"
description: "Brief one-line description"
tags:
- architecture
- decision
- area-of-concern
status: published # proposed, published, deprecated, superseded
owner: "core-maintainer" # Primary decision owner
authors:
- name: "Author Name"
purpose: "Why this ADR was written"
---- Status: Current status (proposed, published, deprecated, superseded)
- Context: Why this decision was needed
- Decision: What decision was made and how
- Consequences: Positive and negative impacts
- Alternatives: Options considered and why rejected
- Implementation: How the decision was implemented
- Performance Benchmarks: Metrics and measurements (if applicable)
- References: Links to related documents and code
- proposed: Under consideration, not yet approved
- published: Accepted and implemented
- deprecated: No longer used, replaced by newer approach
- superseded: Replaced by a newer ADR (should reference the new ADR)
ADR files are named with sequential numbers:
0001-adr-title-kebab-case.md0002-another-adr-title.md0031-comprehensive-benchmarking-framework.md
Use the next available number and follow kebab-case for the title.
- Use the template: Copy adr-template.md to
NNNN-your-adr-title.md - Fill in the sections: Complete all required sections
- Request review: Create a PR with the ADR
- Iterate: Address feedback and refine
- Approve and merge: Once consensus is reached
- Update status: Change status from "proposed" to "published"
If an ADR is no longer valid:
- Update the status to
deprecated - Add a deprecation notice at the top
- Reference the replacement ADR if applicable
Example:
> **DEPRECATED (2025-11-17)**: This approach is no longer used.
> **Reason**: Replaced by more efficient algorithm
> **Reference**: See [ADR-032: Better Algorithm](0032-better-algorithm.md)If a newer ADR replaces an existing one:
- Update the old ADR status to
superseded - Add a supersession notice referencing the new ADR
- The new ADR should reference the old ADR in Alternatives section
The repository may contain several example ADRs:
- Infrastructure Decisions: Platform choices, deployment strategies
- Architectural Patterns: Design patterns and architectural approaches
- Technology Selections: Framework, library, or tool choices
- API Design: API structure and design decisions
- Make Decisions Explicit: Even if a decision seems obvious, document it
- Include Trade-offs: Explain what we're gaining and what we're sacrificing
- Be Concise: Focus on the essential information
- Use Examples: Include code samples or diagrams when helpful
- Reference Alternatives: Show that alternatives were considered
- Document Implementation: Explain how the decision was actually implemented
- Update When Needed: If a decision changes, update the ADR
When referencing ADRs in code or docs, use:
See [ADR-001: Decision Title](docs/ADRs/0001-decision-title.md) for details.For questions about a specific ADR, reach out to:
- ADR Author: Listed in the
authorsfield - Owner: Listed in the
ownerfield - Team Discussion: Open a GitHub Discussion
Reference: This ADR process is based on Nygard's ADR format with modifications for Python Libs.