1. Skip to content

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:

Userid: UUIDemail: Stringpassword: Stringauthenticate(): booleanresetPassword(): voidOrderid: UUIDuserId: UUIDstatus: OrderStatuscancel(): voidcomplete(): voidOrderItemquantity: intprice: Decimalplaces1*contains1*
Userid: UUIDemail: Stringpassword: Stringauthenticate(): booleanresetPassword(): voidOrderid: UUIDuserId: UUIDstatus: OrderStatuscancel(): voidcomplete(): voidOrderItemquantity: intprice: Decimalplaces1*contains1*

Relaciones:

  • -->: Asociación
  • *--: Composición
  • o--: 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:

FrontendBackendDataReact AppRedux StoreAPI GatewayAuth ServiceUser ServiceOrder ServicePostgreSQLRedis
FrontendBackendDataReact AppRedux StoreAPI GatewayAuth ServiceUser ServiceOrder ServicePostgreSQLRedis

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:

AWSEKS ClusterCloudflareRDS PostgreSQLS3 BucketFrontend PodsBackend PodsCDN
AWSEKS ClusterCloudflareRDS PostgreSQLS3 BucketFrontend PodsBackend PodsCDN

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