L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Documents · SKILL.md

technical-documentation

technical-documentation

Writes clear, structured technical documentation including READMEs, API docs, getting-started guides, and architectural overviews following industry conventions and developer experience best practices.

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: technical-documentation description: Writes clear, structured technical documentation including READMEs, API docs, getting-started guides, and architectural overviews following industry conventions and developer experience best practices. license: MIT compatibility: opencode metadata: version: "1.0.0" domain: writing triggers: technical documentation, how do i write docs, README, API documentation, getting started guide, architecture overview, developer experience, docs-as-code getting started guide archetypes:

  • educational anti_triggers:
  • brainstorming
  • vague ideation response_profile: verbosity: medium directive_strength: low abstraction_level: strategic role: reference scope: implementation output-format: report content-types:
  • guidance
  • examples
  • do-dont related-skills: humanizer

Technical Documentation Writer

Writes clear, structured, and actionable technical documentation that helps developers understand, adopt, and use software effectively. Covers READMEs, API references, getting-started guides, and architectural overviews using proven conventions.

TL;DR Checklist

  • Lead with the "why" — users need to know what this project does before how it works
  • Use progressive disclosure: basics first, advanced topics behind links or in separate pages
  • Every code example must be complete enough to copy-paste and run (or clearly indicate what's omitted)
  • Include both "quick start" (5 minutes) and "deep dive" sections
  • Cross-reference related concepts within the docs rather than expecting users to search elsewhere
  • Use consistent terminology — don't swap between "server", "backend", "API endpoint", and "service" for the same thing

When to Use

Use this skill when:

  • Writing a project README from scratch or revamping an existing one
  • Documenting API endpoints, methods, classes, or interfaces for a codebase
  • Creating onboarding or getting-started guides for new developers joining a project
  • Writing architectural decision records (ADRs) or system design documentation
  • Converting verbal explanations or meeting notes into structured technical docs
  • Improving an existing document that developers find confusing or incomplete

When NOT to Use

Avoid this skill for:

  • Writing marketing copy, blog posts, or release announcements — use writing/style-guide instead
  • Creating user-facing help articles or end-user manuals — those need a different tone and structure
  • Translating AI-written text into natural language — use the humanizer skill for that
  • Updating code comments inline with docstrings — those follow language-specific conventions

Core Workflow

  1. Identify the Audience and Purpose — Before writing a single word, determine:

    • Who is reading this? (new developers, API consumers, team members, contributors)
    • What should they be able to do after reading? (install, integrate, understand architecture)
    • What prior knowledge can you assume? (Do they know the framework? The domain?)
  2. Choose the Document Type — Match structure to purpose:

    • README → Project overview + quick start + key concepts + contribution guidelines
    • API Reference → Endpoint/method name + parameters + return types + examples + error codes
    • Getting Started → Prerequisites + installation + first working example (not "hello world", but a real use case)
    • Architecture Overview → System diagram description + component roles + data flow + tech stack rationale
  3. Draft the Content — Follow the structure for your document type:

    • Start with a one-sentence summary that stands alone (users often never read past it)
    • Use headings as a navigational outline — a user should understand the doc just by reading headings
    • Write code examples in context, not as isolated blocks that require external explanation
  4. Review for Developer Experience — Apply these lenses:

    • The "Time to Hello World" test — how many steps until a user gets something working?
    • The "missing assumption" check — what did you assume they already know that they don't?
    • The "broken link" audit — do all cross-references work and point to current content?
  5. Format for Readability — Apply consistent formatting:

    • Use tables for parameters with columns: Name | Type | Required | Description
    • Use inline code (backticks) for file paths, config values, CLI commands
    • Use fenced code blocks (with language) for multi-line examples
    • Use callout boxes (note/warning/tip) sparingly — they only work if you use them rarely

Implementation Patterns / Reference Guide

Pattern 1: README Structure

A good README answers these questions in order: What is this? Why should I care? How do I use it? How do I contribute?

# Project Name

One-sentence description that a stranger can understand. No jargon without explanation.

## Quick Start

Three to five commands or steps that get a developer from zero to "it works." 
This section should be copy-paste executable for most users.

```bash
git clone https://github.com/owner/repo.git
cd repo
pip install -e .
# Run the example
python examples/basic.py

Table of Contents

  • Installation — Prerequisites, setup for different environments
  • Usage — Common use cases with code examples
  • API Reference — Link to full API docs (or embed if small)
  • Configuration — Environment variables, config files, defaults
  • Development — How to run tests, linting, contributing guidelines

Installation

Prerequisites

  • Python 3.10+
  • PostgreSQL 14+
  • Redis 7+
# Install from source
git clone https://github.com/owner/repo.git && cd repo
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

Configuration

Copy .env.example to .env and fill in your values:

cp .env.example .env
# Edit .env with your database credentials, API keys, etc.

Usage

Basic Example

from myproject import Client

client = Client(api_key="your-key")
result = client.query("select count(*) from users")
print(result)

Advanced: Streaming Results

For large result sets, use streaming to avoid loading everything into memory:

with client.stream_query(
    "SELECT * FROM events WHERE date > '2024-01-01'",
    batch_size=1000
) as stream:
    for batch in stream:
        process_batch(batch)

Contributing

Please read CONTRIBUTING.md before submitting pull requests.


### Pattern 2: API Reference Documentation (BAD vs GOOD)

API documentation should answer every question a consumer might have before they need to ask.

```markdown
<!-- ❌ BAD: Sparse, assumes too much knowledge -->

## Methods

### query(sql)

Executes SQL against the database. Returns results.

**Parameters:**
- `sql` — The SQL string

**Returns:** Results

---

<!-- ✅ GOOD: Complete, copy-paste ready, with edge cases covered -->

## Methods

### `query(sql: str) -> QueryResult`

Executes a SQL query against the connected database and returns structured results.

This method handles connection pooling automatically and supports both synchronous
and asynchronous execution contexts.

**Parameters:**

| Parameter | Type   | Required | Description                          |
|-----------|--------|----------|--------------------------------------|
| `sql`     | `str`  | Yes      | SQL query string to execute          |
| `params`  | `list` | No       | Positional parameters for prepared statements |
| `timeout` | `int`  | No       | Query timeout in seconds (default: 30) |

**Returns:**

`QueryResult` object containing:

| Attribute   | Type          | Description                        |
|-------------|---------------|------------------------------------|
| `rows`      | `list[dict]`  | Result rows as dictionaries        |
| `columns`   | `list[str]`   | Column names in order              |
| `row_count` | `int`         | Number of rows returned            |
| `affected`  | `int`         | Rows affected (for INSERT/UPDATE)  |

**Example:**

```python
result = client.query(
    "SELECT id, name FROM users WHERE active = ?",
    params=[True],
    timeout=10
)

for row in result.rows:
    print(f"{row['id']}: {row['name']}")

Error Handling:

Error TypeWhen RaisedRecovery
ConnectionErrorDatabase unavailableRetry with exponential backoff
QueryTimeoutErrorQuery exceeded timeout limitSimplify query or increase timeout
ParseErrorSQL syntax errorValidate SQL before execution

Notes:

  • For large result sets (>100K rows), prefer stream_query() to avoid memory pressure
  • Parameterized queries (params) are required for user-supplied input to prevent SQL injection
  • Connection pooling is handled transparently — no manual connection management needed

### Pattern 3: Getting Started Guide Structure

A getting started guide should take a developer from "never heard of this" to "building something real" in under 15 minutes.

```markdown
# Getting Started with [Project Name]

This guide walks you through your first working integration in about 10 minutes.

## What You'll Build

By the end of this guide, you'll have a running application that:

1. Connects to [Service/API/Database]
2. Performs a real operation (not "hello world")
3. Handles errors gracefully

**Prerequisites:**

- Python 3.10+ installed (`python --version` should show 3.10 or higher)
- An active [Account Type] with your API key from the [Dashboard URL]
- At least 500MB of free disk space

## Step 1: Install the SDK

```bash
pip install project-sdk

Verify the installation:

python -c "import project_sdk; print(project_sdk.__version__)"
# Should print something like: 2.4.1

If you see ModuleNotFoundError, ensure your virtual environment is activated:

source .venv/bin/activate  # On macOS/Linux
# or
.venv\Scripts\activate     # On Windows

Step 2: Configure Your API Key

Create a file called config.yaml in your project root:

api_key: "your-api-key-here"
environment: "development"
timeout: 30

⚠️ Security Note: Never commit your API key to version control. Add config.yaml to your .gitignore.

Step 3: Write Your First Query

Create main.py:

from project_sdk import Client, ConfigError

try:
    client = Client.from_config("config.yaml")
    
    # This is a real query — not "hello world"
    response = client.list_resources(limit=10)
    
    for resource in response.items:
        print(f"{resource.id}: {resource.name} ({resource.status})")
        
except ConfigError as e:
    print(f"Configuration error: {e}")
    print("Check that config.yaml exists and contains a valid api_key.")
except ConnectionError as e:
    print(f"Connection failed: {e}")
    print("Verify your API key is correct and the service is reachable.")

Run it:

python main.py
# Expected output:
# abc123: My Resource (active)
# def456: Another Resource (pending)
# ...

Step 4: What's Next?

Need Help?


### Pattern 4: Architecture Overview

An architecture overview explains the "why" behind system design decisions without drowning readers in implementation details.

```markdown
# System Architecture

This document describes the high-level architecture of [Project Name], including component responsibilities, data flow, and technology choices.

## High-Level Overview

[Project Name] follows a **service-oriented architecture** with three primary tiers:

┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ Client App │────▶│ API Layer │────▶│ Data Services │ │ (Web/Mobile)│ │ (FastAPI) │ │ (PostgreSQL + │ │ │◀────│ │◀────│ Redis Cache) │ └─────────────┘ └──────┬───────┘ └──────────────────┘ │ ┌──────▼───────┐ │ Background │ │ Workers │ │ (Celery) │ └──────────────┘


**Key Design Decisions:**

1. **API Gateway Pattern** — All external traffic routes through a single FastAPI entry point for authentication, rate limiting, and request validation before reaching business logic.

2. **CQRS Separation** — Read operations use Redis-cached queries (fast path). Write operations go through the command pipeline with event sourcing for audit trails.

3. **Async Workers** — CPU-intensive tasks (report generation, data processing) are offloaded to Celery workers, keeping the API layer responsive.

## Component Responsibilities

### API Layer (FastAPI)

The public-facing entry point. Handles:
- Request/response serialization (Pydantic models)
- Authentication via JWT tokens
- Input validation and sanitization
- Rate limiting (100 req/min per API key)
- Structured logging (JSON format, correlation IDs)

**Not its responsibility:** Business logic, data persistence, or background processing.

### Data Services

**PostgreSQL** — Primary data store for:
- User accounts and profiles
- Transaction records (immutable audit trail)
- Configuration and metadata

**Redis** — Cache layer for:
- Session storage (TTL-based expiration)
- Query result caching (5-minute default TTL)
- Distributed rate limiting counters

### Background Workers

Celery workers consume from RabbitMQ queues:
- `high_priority` — Time-sensitive operations (webhooks, real-time notifications)
- `standard` — Report generation, data syncs, batch processing
- `low_priority` — Analytics aggregation, cleanup tasks

Each queue has configurable concurrency limits to prevent resource contention.

## Data Flow Example: Creating a Resource

1. **Client** sends POST `/resources` with JSON body and JWT token
2. **API Layer** validates the token, deserializes the request into a Pydantic model
3. **Business Logic** creates the record in PostgreSQL within a database transaction
4. **Event Emitter** publishes a `resource.created` event to RabbitMQ
5. **Worker** consumes the event and triggers downstream processes (notifications, cache invalidation)
6. **Response** returns HTTP 201 with the created resource representation

## Technology Rationale

| Component | Choice | Why | Alternative Considered |
|-----------|--------|-----|----------------------|
| API Framework | FastAPI | Native async support, automatic OpenAPI docs, Pydantic integration | Django REST Framework, Flask + Marshmallow |
| Database | PostgreSQL | ACID compliance, JSONB for flexible schemas, mature ORM support | MySQL, MongoDB |
| Cache | Redis | In-memory speed, pub/sub for real-time updates, native TTL | Memcached, local LRU cache |
| Task Queue | Celery + RabbitMQ | Battle-tested at scale, retry semantics, priority queues | RQ, Airflow (too heavy), Temporal (overkill) |

## Scaling Considerations

- **Read-heavy workloads:** Redis cache hit ratio typically 85-92%, reducing PostgreSQL load by ~60%
- **Write scaling:** PostgreSQL read replicas serve 40% of queries; primary handles all writes
- **Horizontal scaling:** API layer and workers are stateless — add instances behind a load balancer
- **Bottlenecks to watch:** Redis memory usage (maxmemory policy: `allkeys-lru`), RabbitMQ queue depth (>10K items triggers alert)

Constraints

MUST DO

  • Write for the "busy developer" — they scan first, read selectively. Make skimmable information (headings, bold key terms, code snippets) easy to find
  • Every code example must include the import statement and any setup required to run it standalone
  • Use consistent naming across all docs — if you call something a "resource" in one section, don't call it an "entity" or "object" elsewhere
  • Link related documents to each other — users should never have to guess what to read next
  • Include error handling in examples — production code fails, and your docs should show how to handle failures gracefully

MUST NOT DO

  • Do NOT write documentation that requires reading a separate document to understand the example (everything self-contained)
  • Do NOT use vague language like "easily," "seamlessly," or "powerfully" — these add no information
  • Do NOT include internal implementation details in user-facing docs (save those for architecture docs or code comments)
  • Do NOT mix first-person ("I recommend...") and second-person ("you should...") voice in the same document
  • Do NOT assume knowledge of acronyms on first use — spell them out once, then use the abbreviation

Output Template

When writing or reviewing technical documentation, produce:

  1. Document Type Assessment — Identify what kind of document is needed (README, API reference, getting-started guide, architecture overview) and why
  2. Audience Analysis — Describe who this is for and what they already know
  3. Content Outline — Provide a heading-based outline before writing full content
  4. Draft Document — Complete markdown document following the structure appropriate to its type
  5. Code Examples — All examples must be complete, copy-paste executable, with language tags
  6. Review Checklist — Note any areas that need verification (API endpoint URLs, configuration values, version numbers)

Related Skills

SkillPurpose
humanizerDetects and removes AI writing patterns after drafting docs to produce natural, human-sounding prose
Skills enregistrées