that initial commit
This commit is contained in:
472
docs/standards/documentation-organization.md
Normal file
472
docs/standards/documentation-organization.md
Normal file
@@ -0,0 +1,472 @@
|
||||
# Documentation Organization Standard
|
||||
|
||||
## Purpose
|
||||
|
||||
This document defines the organization and structure of all StarPunk documentation. It establishes clear guidelines for what types of documents belong where, naming conventions, and when to create each type.
|
||||
|
||||
## Philosophy
|
||||
|
||||
Documentation follows the same principle as code: "Every document must justify its existence." Documents should be:
|
||||
|
||||
- **Actionable**: Provide clear guidance for implementation
|
||||
- **Discoverable**: Easy to find based on purpose
|
||||
- **Maintainable**: Updated as decisions evolve
|
||||
- **Minimal**: No redundant or unnecessary documentation
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
docs/
|
||||
├── architecture/ # High-level system design and overviews
|
||||
├── decisions/ # Architecture Decision Records (ADRs)
|
||||
├── design/ # Detailed technical designs and specifications
|
||||
└── standards/ # Coding standards, conventions, and guidelines
|
||||
```
|
||||
|
||||
## Document Types
|
||||
|
||||
### 1. Architecture Documents (`docs/architecture/`)
|
||||
|
||||
**Purpose**: High-level system architecture, component relationships, and technology overviews.
|
||||
|
||||
**When to Create**:
|
||||
- Describing the overall system architecture
|
||||
- Documenting major subsystems and their interactions
|
||||
- Explaining technology stack choices (overview)
|
||||
- Defining deployment architecture
|
||||
- Documenting security architecture
|
||||
- Creating data flow diagrams
|
||||
|
||||
**Naming Convention**: `{topic}.md`
|
||||
|
||||
**Examples**:
|
||||
- `overview.md` - System architecture overview
|
||||
- `components.md` - Component descriptions and relationships
|
||||
- `data-flow.md` - How data moves through the system
|
||||
- `security.md` - Security architecture and threat model
|
||||
- `deployment.md` - Deployment architecture and strategies
|
||||
- `technology-stack.md` - Complete technology stack with rationale
|
||||
|
||||
**Characteristics**:
|
||||
- Broad scope, high-level view
|
||||
- Focus on "what" and "why" at system level
|
||||
- Includes diagrams and visual representations
|
||||
- Describes component interactions
|
||||
- Documents architectural patterns
|
||||
- References relevant ADRs
|
||||
|
||||
**Template Structure**:
|
||||
```markdown
|
||||
# {Topic} Architecture
|
||||
|
||||
## Overview
|
||||
[High-level description]
|
||||
|
||||
## Components
|
||||
[Major components and their roles]
|
||||
|
||||
## Interactions
|
||||
[How components communicate]
|
||||
|
||||
## Patterns
|
||||
[Architectural patterns employed]
|
||||
|
||||
## Diagrams
|
||||
[Visual representations]
|
||||
|
||||
## References
|
||||
[Links to related ADRs and design docs]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. Architecture Decision Records (`docs/decisions/`)
|
||||
|
||||
**Purpose**: Document significant architectural decisions with context, rationale, and alternatives considered.
|
||||
|
||||
**When to Create**:
|
||||
- Selecting technologies or libraries
|
||||
- Choosing between architectural approaches
|
||||
- Making trade-offs that affect multiple components
|
||||
- Establishing patterns or standards
|
||||
- Accepting technical debt
|
||||
- Rejecting common alternatives
|
||||
|
||||
**Naming Convention**: `ADR-{NNN}-{short-title}.md`
|
||||
- NNN = Zero-padded sequential number (001, 002, etc.)
|
||||
- short-title = Kebab-case description
|
||||
|
||||
**Examples**:
|
||||
- `ADR-001-python-web-framework.md`
|
||||
- `ADR-002-flask-extensions.md`
|
||||
- `ADR-003-frontend-technology.md`
|
||||
- `ADR-004-file-based-note-storage.md`
|
||||
- `ADR-005-indielogin-authentication.md`
|
||||
- `ADR-006-python-virtual-environment-uv.md`
|
||||
|
||||
**Characteristics**:
|
||||
- Focused on a single decision
|
||||
- Documents the decision-making process
|
||||
- Includes evaluation criteria
|
||||
- Lists alternatives considered with scores
|
||||
- Explains trade-offs and consequences
|
||||
- Has a status (Proposed, Accepted, Superseded)
|
||||
- Immutable once accepted (new ADR to change)
|
||||
|
||||
**Required Template**:
|
||||
```markdown
|
||||
# ADR-{NNN}: {Title}
|
||||
|
||||
## Status
|
||||
{Proposed|Accepted|Superseded by ADR-XXX}
|
||||
|
||||
## Context
|
||||
What is the issue we're addressing? What are the requirements?
|
||||
What constraints do we face?
|
||||
|
||||
## Decision
|
||||
What have we decided? Be specific and clear.
|
||||
|
||||
## Rationale
|
||||
Why did we make this decision?
|
||||
|
||||
### {Technology/Approach} Score: X/10
|
||||
- Simplicity Score: X/10 - [explanation]
|
||||
- Fitness Score: X/10 - [explanation]
|
||||
- Maintenance Score: X/10 - [explanation]
|
||||
- Standards Compliance: Pass/Fail - [explanation]
|
||||
|
||||
## Consequences
|
||||
|
||||
### Positive
|
||||
- [List benefits]
|
||||
|
||||
### Negative
|
||||
- [List drawbacks]
|
||||
|
||||
### Mitigation
|
||||
- [How we address drawbacks]
|
||||
|
||||
## Alternatives Considered
|
||||
|
||||
### {Alternative 1} (Rejected/Considered)
|
||||
- Simplicity: X/10 - [explanation]
|
||||
- Fitness: X/10 - [explanation]
|
||||
- Maintenance: X/10 - [explanation]
|
||||
- Verdict: [Why rejected]
|
||||
|
||||
### {Alternative 2} (Rejected/Considered)
|
||||
[Same structure]
|
||||
|
||||
## Implementation Notes
|
||||
[Any specific guidance for implementing this decision]
|
||||
|
||||
## References
|
||||
- [Links to specifications, documentation, related ADRs]
|
||||
```
|
||||
|
||||
**Status Values**:
|
||||
- **Proposed**: Decision is under consideration
|
||||
- **Accepted**: Decision is final and should be implemented
|
||||
- **Superseded**: Decision has been replaced (link to new ADR)
|
||||
|
||||
**Numbering Rules**:
|
||||
- Numbers are sequential starting from 001
|
||||
- Never reuse or skip numbers
|
||||
- Numbers are assigned when ADR is created, not when accepted
|
||||
- Numbers provide chronological history
|
||||
|
||||
---
|
||||
|
||||
### 3. Design Documents (`docs/design/`)
|
||||
|
||||
**Purpose**: Detailed technical specifications for implementation, including schemas, APIs, file formats, and component interfaces.
|
||||
|
||||
**When to Create**:
|
||||
- Defining database schemas
|
||||
- Specifying API contracts and endpoints
|
||||
- Designing file formats and structures
|
||||
- Defining component interfaces
|
||||
- Specifying configuration formats
|
||||
- Documenting project structure
|
||||
- Creating initial setup specifications
|
||||
|
||||
**Naming Convention**: `{component-or-feature}.md`
|
||||
|
||||
**Examples**:
|
||||
- `project-structure.md` - Complete directory and file organization
|
||||
- `database-schema.md` - Database tables, columns, indexes, relationships
|
||||
- `api-contracts.md` - RESTful API endpoint specifications
|
||||
- `micropub-endpoint.md` - Micropub API implementation details
|
||||
- `rss-feed-format.md` - RSS feed structure and generation
|
||||
- `ui-patterns.md` - User interface patterns and components
|
||||
- `component-interfaces.md` - How components communicate
|
||||
- `initial-files.md` - Bootstrap files and configurations
|
||||
- `authentication-flow.md` - Detailed auth implementation
|
||||
|
||||
**Characteristics**:
|
||||
- Detailed and specific
|
||||
- Implementation-ready specifications
|
||||
- Includes code examples, schemas, formats
|
||||
- Defines exact file contents when applicable
|
||||
- Provides acceptance criteria
|
||||
- Focus on "how" at implementation level
|
||||
- Should be sufficient for developer to implement
|
||||
|
||||
**Template Structure**:
|
||||
```markdown
|
||||
# {Component/Feature} Design
|
||||
|
||||
## Purpose
|
||||
[What this component/feature does]
|
||||
|
||||
## Overview
|
||||
[High-level description]
|
||||
|
||||
## Specification
|
||||
|
||||
### {Aspect 1}
|
||||
[Detailed specification with examples]
|
||||
|
||||
### {Aspect 2}
|
||||
[Detailed specification with examples]
|
||||
|
||||
## Implementation Details
|
||||
|
||||
### File Structure
|
||||
[If applicable]
|
||||
|
||||
### API Endpoints
|
||||
[If applicable]
|
||||
|
||||
### Database Schema
|
||||
[If applicable]
|
||||
|
||||
### Configuration
|
||||
[If applicable]
|
||||
|
||||
## Examples
|
||||
[Concrete examples of usage]
|
||||
|
||||
## Acceptance Criteria
|
||||
[How to verify correct implementation]
|
||||
|
||||
## References
|
||||
[Related ADRs, standards, specifications]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. Standards Documents (`docs/standards/`)
|
||||
|
||||
**Purpose**: Establish coding conventions, development practices, and guidelines that ensure consistency.
|
||||
|
||||
**When to Create**:
|
||||
- Defining coding style guidelines
|
||||
- Establishing naming conventions
|
||||
- Documenting development setup procedures
|
||||
- Creating testing standards
|
||||
- Defining commit message formats
|
||||
- Establishing documentation standards
|
||||
- Setting API design principles
|
||||
|
||||
**Naming Convention**: `{topic}-standards.md` or `{topic}-setup.md`
|
||||
|
||||
**Examples**:
|
||||
- `documentation-organization.md` - This document
|
||||
- `python-coding-standards.md` - Python style guide
|
||||
- `development-setup.md` - Setup procedures
|
||||
- `testing-strategy.md` - Testing approach and standards
|
||||
- `api-design.md` - API design principles
|
||||
- `indieweb-compliance.md` - How to meet IndieWeb specs
|
||||
- `commit-conventions.md` - Git commit standards
|
||||
|
||||
**Characteristics**:
|
||||
- Prescriptive and normative
|
||||
- Define consistent practices
|
||||
- Include examples of good/bad patterns
|
||||
- Focus on "how we work"
|
||||
- Living documents (updated as practices evolve)
|
||||
- Should include rationale for standards
|
||||
|
||||
**Template Structure**:
|
||||
```markdown
|
||||
# {Topic} Standards
|
||||
|
||||
## Purpose
|
||||
[Why these standards exist]
|
||||
|
||||
## Principles
|
||||
[Core principles underlying the standards]
|
||||
|
||||
## Standards
|
||||
|
||||
### {Standard Category 1}
|
||||
[Detailed standard with examples]
|
||||
|
||||
**Good Example**:
|
||||
```[code/example]
|
||||
```
|
||||
|
||||
**Bad Example**:
|
||||
```[code/example]
|
||||
```
|
||||
|
||||
**Rationale**: [Why this is the standard]
|
||||
|
||||
### {Standard Category 2}
|
||||
[Same structure]
|
||||
|
||||
## Enforcement
|
||||
[How standards are enforced - tools, reviews, etc.]
|
||||
|
||||
## Exceptions
|
||||
[When it's acceptable to deviate]
|
||||
|
||||
## References
|
||||
[Related standards, tools, specifications]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cross-References
|
||||
|
||||
Documents should reference each other appropriately:
|
||||
|
||||
- **ADRs** → Should be referenced by Architecture, Design, and Standards docs
|
||||
- **Architecture** → References ADRs, links to Design docs
|
||||
- **Design** → References ADRs, may reference Standards
|
||||
- **Standards** → May reference ADRs for rationale
|
||||
|
||||
**Reference Format**:
|
||||
```markdown
|
||||
See [ADR-001: Python Web Framework](/home/phil/Projects/starpunk/docs/decisions/ADR-001-python-web-framework.md)
|
||||
See [Database Schema Design](/home/phil/Projects/starpunk/docs/design/database-schema.md)
|
||||
See [Python Coding Standards](/home/phil/Projects/starpunk/docs/standards/python-coding-standards.md)
|
||||
```
|
||||
|
||||
## Document Lifecycle
|
||||
|
||||
### Creating Documents
|
||||
|
||||
1. **Determine Type**: Which category does this belong in?
|
||||
2. **Check for Existing**: Does a similar document already exist?
|
||||
3. **Name Appropriately**: Follow naming conventions
|
||||
4. **Use Template**: Start from the appropriate template
|
||||
5. **Be Specific**: Include actionable details
|
||||
6. **Reference Related Docs**: Link to ADRs and other docs
|
||||
|
||||
### Updating Documents
|
||||
|
||||
**ADRs**: Once accepted, ADRs are immutable. To change a decision:
|
||||
- Create a new ADR
|
||||
- Reference the old ADR
|
||||
- Mark old ADR as "Superseded by ADR-XXX"
|
||||
|
||||
**Other Documents**: Living documents that should be updated:
|
||||
- Add changelog section if document changes significantly
|
||||
- Update references when related docs change
|
||||
- Keep in sync with actual implementation
|
||||
|
||||
### Deprecating Documents
|
||||
|
||||
**Don't Delete**: Mark as deprecated instead
|
||||
- Add "DEPRECATED" to title
|
||||
- Add note explaining why and what replaced it
|
||||
- Keep for historical reference
|
||||
|
||||
## Quality Checklist
|
||||
|
||||
Before finalizing any document:
|
||||
|
||||
- [ ] Is this the right document type for this content?
|
||||
- [ ] Is the file in the correct directory?
|
||||
- [ ] Does it follow the naming convention?
|
||||
- [ ] Does it use the appropriate template?
|
||||
- [ ] Is the content actionable and specific?
|
||||
- [ ] Are all references correct and complete?
|
||||
- [ ] Are there code examples where helpful?
|
||||
- [ ] Is the rationale clear?
|
||||
- [ ] Can a developer implement from this?
|
||||
- [ ] Have I removed unnecessary content?
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
**Avoid**:
|
||||
- Mixing document types (ADR with design specs)
|
||||
- Redundant documentation (saying same thing in multiple places)
|
||||
- Vague specifications ("should be fast", "user-friendly")
|
||||
- Missing rationale (standards without explaining why)
|
||||
- Orphaned documents (not referenced anywhere)
|
||||
- Documentation for documentation's sake
|
||||
- Copy-pasting without adapting
|
||||
|
||||
## Tools and Automation
|
||||
|
||||
**Validation**:
|
||||
- Check links: Ensure all references point to existing files
|
||||
- Naming validation: Verify naming conventions
|
||||
- Template compliance: Ensure required sections exist
|
||||
|
||||
**Future Enhancements** (V2):
|
||||
- Automated ADR numbering
|
||||
- Documentation index generator
|
||||
- Link checker
|
||||
- Template enforcement
|
||||
|
||||
## Examples
|
||||
|
||||
### When to Create Which Document Type
|
||||
|
||||
**Scenario**: Choosing between SQLite and PostgreSQL
|
||||
|
||||
→ Create an ADR (`ADR-007-database-engine.md`)
|
||||
- This is a technology decision
|
||||
- Needs evaluation of alternatives
|
||||
- Has long-term architectural impact
|
||||
|
||||
**Scenario**: Defining the exact database schema
|
||||
|
||||
→ Create a Design doc (`database-schema.md`)
|
||||
- This is detailed specification
|
||||
- Implementation-ready
|
||||
- May evolve as requirements change
|
||||
|
||||
**Scenario**: Establishing how to write database migrations
|
||||
|
||||
→ Create a Standards doc (`database-migration-standards.md`)
|
||||
- This is a practice/process
|
||||
- Defines consistent approach
|
||||
- Applies to all database changes
|
||||
|
||||
**Scenario**: Explaining how authentication, database, and file storage work together
|
||||
|
||||
→ Create an Architecture doc or update existing (`architecture/overview.md`)
|
||||
- This is system-level interaction
|
||||
- Cross-component relationship
|
||||
- High-level understanding
|
||||
|
||||
## Summary
|
||||
|
||||
| Type | Purpose | Location | Mutability | Naming |
|
||||
|------|---------|----------|------------|--------|
|
||||
| **Architecture** | System-level design | `docs/architecture/` | Living | `{topic}.md` |
|
||||
| **ADR** | Decision records | `docs/decisions/` | Immutable | `ADR-{NNN}-{title}.md` |
|
||||
| **Design** | Implementation specs | `docs/design/` | Living | `{component}.md` |
|
||||
| **Standards** | Coding/process guidelines | `docs/standards/` | Living | `{topic}-standards.md` |
|
||||
|
||||
## Principles Summary
|
||||
|
||||
1. **One Document Type Per File**: Don't mix ADR with Design specs
|
||||
2. **Right Place, Right Name**: Follow conventions strictly
|
||||
3. **Actionable Content**: Documentation should enable implementation
|
||||
4. **Minimal but Complete**: Every document must justify its existence
|
||||
5. **Reference Richly**: Link to related documents
|
||||
6. **Update Living Docs**: Keep non-ADR docs current
|
||||
7. **Never Delete**: Deprecate instead for historical reference
|
||||
|
||||
## References
|
||||
|
||||
- Michael Nygard's ADR pattern: https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
|
||||
- Arc42 documentation: https://arc42.org/
|
||||
- Diátaxis documentation framework: https://diataxis.fr/
|
||||
Reference in New Issue
Block a user