Code Documentation

MoizIbnYousaf/ai-agent-skills/skills/code-documentation

by MoizIbnYousaf6d95c788aa22ce39a4807b9a4c31c758a2036dc6MITListed Oct 9, 2026Updated Oct 9, 2026

Writing effective code documentation - API docs, README files, inline comments, and technical guides. Use for documenting codebases, APIs, or writing developer guides.

AI-generated overview

Guides writing code documentation: README files, API references, inline comments, and architecture records.

What it does
Provides templates and conventions for documenting software: a standard README structure, JSDoc/TSDoc and OpenAPI/Swagger API documentation styles, guidance on when to write or avoid inline comments, and architecture documentation formats such as ADRs and component overviews. It also lists documentation principles covering audience, proximity to code, freshness, examples, and progressive disclosure. It produces written documentation guidance rather than generated files.
When to use it
Use when documenting a codebase, API, or developer guide, or when establishing conventions for READMEs, comments, and architecture records. It suits developers and technical writers who need a consistent structure for project documentation.
Requirements
No tools, packages, runtimes, credentials, or network access are required; it is instructions only and ships no scripts.

Code Documentation

README Structure

Standard README Template

markdown
# Project Name
Brief description of what this project does.
## Quick Start
\`\`\`bashnpm installnpm run dev\`\`\`
## Installation
Detailed installation instructions...
## Usage
\`\`\`typescriptimport { something } from 'project';
// Example usageconst result = something.doThing();\`\`\`
## API Reference
### `functionName(param: Type): ReturnType`
Description of what the function does.
**Parameters:**- `param` - Description of parameter
**Returns:** Description of return value
**Example:**\`\`\`typescriptconst result = functionName('value');\`\`\`
## Configuration
| Option | Type | Default | Description ||--------|------|---------|-------------|| `option1` | `string` | `'default'` | What it does |
## Contributing
How to contribute...
## License
MIT

API Documentation

JSDoc/TSDoc Style

typescript
/** * Creates a new user account. * * @param userData - The user data for account creation * @param options - Optional configuration * @returns The created user object * @throws {ValidationError} If email is invalid * @example * ```ts * const user = await createUser({ *   email: '[email protected]', *   name: 'John' * }); * ``` */async function createUser(  userData: UserInput,  options?: CreateOptions): Promise<User> {  // Implementation}
/** * Configuration options for the API client. */interface ClientConfig {  /** The API base URL */  baseUrl: string;  /** Request timeout in milliseconds @default 5000 */  timeout?: number;  /** Custom headers to include in requests */  headers?: Record<string, string>;}

OpenAPI/Swagger

yaml
openapi: 3.0.0info:  title: My API  version: 1.0.0
paths:  /users:    post:      summary: Create a user      description: Creates a new user account      requestBody:        required: true        content:          application/json:            schema:              $ref: '#/components/schemas/UserInput'      responses:        '201':          description: User created successfully          content:            application/json:              schema:                $ref: '#/components/schemas/User'        '400':          description: Invalid input
components:  schemas:    UserInput:      type: object      required:        - email        - name      properties:        email:          type: string          format: email        name:          type: string    User:      type: object      properties:        id:          type: string        email:          type: string        name:          type: string        createdAt:          type: string          format: date-time

Inline Comments

When to Comment

typescript
// GOOD: Explain WHY, not WHAT
// Use binary search because the list is always sorted and// can contain millions of items - O(log n) vs O(n)const index = binarySearch(items, target);
// GOOD: Explain complex business logic// Users get 20% discount if they've been members for 2+ years// AND have made 10+ purchases (per marketing team decision Q4 2024)if (user.memberYears >= 2 && user.purchaseCount >= 10) {  applyDiscount(0.2);}
// GOOD: Document workarounds// HACK: Safari doesn't support this API, fallback to polling// TODO: Remove when Safari adds support (tracking: webkit.org/b/12345)if (!window.IntersectionObserver) {  startPolling();}

When NOT to Comment

typescript
// BAD: Stating the obvious// Increment counter by 1counter++;
// BAD: Explaining clear code// Check if user is adminif (user.role === 'admin') { ... }
// BAD: Outdated comments (worse than no comment)// Returns the user's full name  <-- Actually returns email now!function getUserIdentifier(user) {  return user.email;}

Architecture Documentation

ADR (Architecture Decision Record)

markdown
# ADR-001: Use PostgreSQL for Primary Database
## StatusAccepted
## ContextWe need a database for storing user data and transactions.Options considered: PostgreSQL, MySQL, MongoDB, DynamoDB.
## DecisionUse PostgreSQL with Supabase hosting.
## Rationale- Strong ACID compliance needed for financial data- Team has PostgreSQL experience- Supabase provides auth and realtime features- pgvector extension for future AI features
## Consequences- Need to manage schema migrations- May need read replicas for scale- Team needs to learn Supabase-specific features

Component Documentation

markdown
## Authentication Module
### OverviewHandles user authentication using JWT tokens with refresh rotation.
### Flow1. User submits credentials to `/auth/login`2. Server validates and returns access + refresh tokens3. Access token used for API requests (15min expiry)4. Refresh token used to get new access token (7d expiry)
### Dependencies- `jsonwebtoken` - Token generation/validation- `bcrypt` - Password hashing- `redis` - Refresh token storage
### Configuration- `JWT_SECRET` - Secret for signing tokens- `ACCESS_TOKEN_EXPIRY` - Access token lifetime- `REFRESH_TOKEN_EXPIRY` - Refresh token lifetime

Documentation Principles

  1. Write for your audience - New devs vs API consumers
  2. Keep it close to code - Docs in same repo, near relevant code
  3. Update with code - Stale docs are worse than none
  4. Examples over explanations - Show, don't just tell
  5. Progressive disclosure - Quick start first, details later

Source and attribution

Source:MoizIbnYousaf/ai-agent-skillsinskills/code-documentationat commit6d95c78

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal