1. Documentación y Diagramas
Lenguajes, herramientas y tipos de diagramas para documentar sistemas de software efectivamente.
1.1 📝 Documentación de Software
Qué: Información escrita o visual que explica cómo funciona, se usa o se mantiene un sistema.
Por qué: Código se lee 10x más de lo que se escribe. Buena doc = onboarding rápido, menos bugs, mejor mantenimiento.
Quién: Developers, technical writers, architects.
Cuándo: Continuo, como parte del desarrollo (no después).
Esfuerzo: 15% del tiempo de desarrollo, paga dividendos en mantenimiento.
1.2 📖 Lenguajes de Documentación
| Lenguaje | Qué | Cuándo | Ejemplo |
|---|---|---|---|
| Markdown | Formato texto plano ligero | READMEs, wikis, docs generales | # Título\n**negrita** |
| AsciiDoc | Markdown con esteroides | Docs técnicas complejas, libros | Soporte tablas, includes |
| reStructuredText | Formato Python docs | Sphinx, docs Python | .. code-block:: python |
| LaTeX | Typesetting matemático/científico | Papers, tesis, documentación científica | Ecuaciones, referencias |
| MDX | Markdown + JSX components | Docs interactivas | Markdown con React components |
1.3 🎨 Herramientas de Diagramas
1.3.1 Diagramas como Código
| Herramienta | Qué | Sintaxis | Caso de Uso |
|---|---|---|---|
| Mermaid | Diagramas en Markdown | Texto declarativo | Flowcharts, secuencia, Gantt, ER |
| PlantUML | UML y más | Texto declarativo | Clases, secuencia, componentes |
| D2 | Diagramas declarativos modernos | Texto declarativo | Arquitectura, diagramas técnicos |
| Graphviz | Layout automático de grafos | DOT language | Dependencias, grafos |
Ventajas diagrams-as-code:
- ✅ Versionado en Git
- ✅ Diffs legibles
- ✅ CI/CD automation
- ✅ No desincroniza con código
1.3.2 Herramientas Visuales
| Herramienta | Qué | Cuándo |
|---|---|---|
| draw.io | Diagramas drag-and-drop free | Prototipado rápido |
| Lucidchart | Diagramas profesionales | Colaboración, org charts |
| Excalidraw | Sketch-style diagramas | Brainstorming, wireframes |
| Miro | Whiteboard colaborativo | Workshops, planning |
| FigJam | Whiteboard Figma | Diseño + diagramas |
1.4 📊 Tipos de Diagramas
1.4.1 Diagrama de Flujo (Flowchart)
Qué: Representa proceso con pasos y decisiones.
Cuándo: Algoritmos, procesos de negocio, workflows.
Mermaid:
graph TD
A[Start] --> B{Usuario autenticado?}
B -->|Sí| C[Mostrar dashboard]
B -->|No| D[Redirigir a login]
C --> E[End]
D --> E
Símbolos:
- Óvalo: Inicio/Fin
- Rectángulo: Proceso
- Rombo: Decisión
- Paralelogramo: Input/Output
1.4.2 C4 Model (Context, Containers, Components, Code)
Qué: Niveles de abstracción para arquitectura de software.
Por qué: Comunicar arquitectura a diferentes audiencias.
Niveles:
| Nivel | Audiencia | Detalle | Ejemplo |
|---|---|---|---|
| C1: Context | Todos (non-tech inclusive) | Sistema y usuarios/sistemas externos | "E-commerce interactúa con Payment Gateway" |
| C2: Containers | Tech leads, architects | Apps, DBs, servicios | "Web App (React) → API (FastAPI) → PostgreSQL" |
| C3: Components | Developers | Módulos dentro de container | "UserController, AuthService, UserRepository" |
| C4: Code | Developers | Clases, métodos | UML class diagram |
Ejemplo C2 (Mermaid):
C4Container
Person(user, "Usuario", "Cliente de e-commerce")
Container_Boundary(system, "Sistema E-commerce") {
Container(web, "Web App", "React", "SPA")
Container(api, "API", "FastAPI", "REST API")
Container(db, "Database", "PostgreSQL", "Datos")
}
System_Ext(payment, "Payment Gateway", "Stripe")
Rel(user, web, "Usa", "HTTPS")
Rel(web, api, "Llama", "JSON/HTTPS")
Rel(api, db, "Lee/Escribe", "SQL")
Rel(api, payment, "Procesa pagos", "HTTPS")
Herramientas: Structurizr, C4-PlantUML
1.4.3 Diagrama Entidad-Relación (ER)
Qué: Modela entidades, atributos y relaciones de base de datos.
Cuándo: Diseñar schema de BD, documentar modelo de datos.
Mermaid:
erDiagram
USER || -- o{ ORDER : places
USER {
int id PK
string email
string name
}
ORDER || -- |{ ORDER_ITEM : contains
ORDER {
int id PK
int user_id FK
datetime created_at
string status
}
ORDER_ITEM {
int id PK
int order_id FK
int product_id FK
int quantity
}
PRODUCT || -- o{ ORDER_ITEM : "ordered in"
PRODUCT {
int id PK
string name
decimal price
}
Cardinalidad:
|| -- ||: One-to-one|| -- o{: One-to-many}o--o{: Many-to-many
1.4.4 Diagrama de Clases (UML)
Qué: Muestra clases, atributos, métodos y relaciones OOP.
Cuándo: Diseñar arquitectura OOP, refactoring.
PlantUML:
Relaciones:
-->: Asociación*--: Composicióno--: Agregación<| --: Herencia<..: Dependencia
1.4.5 Diagrama de Secuencia
Qué: Muestra interacciones entre objetos en el tiempo.
Cuándo: Documentar flujos complejos, API calls, async operations.
Mermaid:
sequenceDiagram
participant U as Usuario
participant W as Web App
participant A as API
participant D as Database
participant P as Payment Gateway
U->>W: Click "Comprar"
W->>A: POST /orders
A->>D: INSERT order
D-->>A: order_id
A->>P: POST /charge
P-->>A: success
A->>D: UPDATE order status
A-->>W: 201 Created
W-->>U: Confirmación
Símbolos:
->: Llamada síncrona-->: Respuesta->>: Llamada asíncrona-->>: Respuesta asíncrona
1.4.6 Diagrama de Componentes
Qué: Muestra organización y dependencias entre componentes del sistema.
Cuándo: Arquitectura modular, microservicios.
PlantUML:
1.4.7 Diagrama de Estados (State Machine)
Qué: Muestra estados posibles de un objeto y transiciones.
Cuándo: Workflows, FSM, ciclos de vida.
Mermaid:
stateDiagram-v2
[*] --> Draft
Draft --> Review: submit()
Review --> Approved: approve()
Review --> Rejected: reject()
Approved --> Published: publish()
Rejected --> Draft: revise()
Published --> Archived: archive()
Archived --> [*]
1.4.8 Diagrama de Arquitectura (System Design)
Qué: Vista de alto nivel de arquitectura del sistema.
Cuándo: Onboarding, design reviews, documentación.
Ejemplo (texto Mermaid):
graph TB
subgraph "Client Layer"
Web[Web App<br/>React]
Mobile[Mobile App<br/>React Native]
end
subgraph "API Layer"
Gateway[API Gateway<br/>Kong]
Auth[Auth Service]
Users[Users Service]
Orders[Orders Service]
end
subgraph "Data Layer"
PG[(PostgreSQL)]
Redis[(Redis)]
S3[(S3)]
end
Web --> Gateway
Mobile --> Gateway
Gateway --> Auth
Gateway --> Users
Gateway --> Orders
Auth --> Redis
Users --> PG
Orders --> PG
Orders --> S3
1.4.9 Diagrama de Despliegue
Qué: Muestra infraestructura física/lógica donde corre el sistema.
Cuándo: DevOps, infraestructura, deployment planning.
PlantUML:
1.5 📚 Tipos de Documentación
| Tipo | Audiencia | Contenido | Ejemplo |
|---|---|---|---|
| README | Developers | Qué es, setup, uso básico | README.md en root |
| API Docs | API consumers | Endpoints, schemas, auth | Swagger UI, Redoc |
| Architecture Decision Records (ADR) | Team | Por qué tomamos decisión X | docs/adr/0use-postgres.md |
| Runbooks | DevOps, on-call | Cómo responder a incidents | "Qué hacer si DB está lenta" |
| User Guides | End users | Cómo usar el producto | Tutorials, FAQs |
| Code Comments | Developers | Por qué existe código complejo | // Workaround for bug X |
1.6 ✍️ Best Practices Documentación
| Práctica | Por qué | Cómo |
|---|---|---|
| Docs como código | Versionado, CI/CD | Markdown en repo, auto-deploy |
| Single Source of Truth | Evitar duplicación | Una ubicación canónica |
| Living Documentation | Actualizado con código | PR incluye doc changes |
| Progresive Disclosure | No overwhelming | Overview → detalles on-demand |
| Examples First | Más fácil entender | Code snippets antes de teoría |
| Search-Friendly | Encontrar rápido | Headings claros, keywords |
1.7 🚫 Anti-patrones
| Anti-patrón | Problema | Solución |
|---|---|---|
| Docs desactualizadas | Peor que no tener docs | CI checks, code+docs juntos |
| Over-documentation | Nadie lee 100 páginas | Conciso, TL;DR sections |
| Documentar obvio | Ruido | Documentar el "por qué", no el "qué" |
| Diagramas en binarios | No versionables | Diagrams-as-code |
| Solo comentarios en código | No discoverable | README, wiki para overview |
1.8 📚 Recursos
- Mermaid Live Editor
- PlantUML Documentation
- C4 Model
- Write the Docs
- Diátaxis Framework - Docs structure