Skip to content
SP StackPractices
beginner

Estrategia de Documentación Técnica — Docs as Code

Guía práctica para tratar la documentación como código: versionado, flujos de review, estructura y herramientas que mantienen los docs precisos, descubribles y mantenibles.

Temas: devops

Estrategia de Documentación Técnica — Docs as Code

Introducción

La documentación es la actividad de mayor apalancamiento en ingeniería de software. Un sistema bien documentado reduce el tiempo de onboarding, previene errores repetidos y preserva contexto a través de cambios de equipo. Tratar docs como código significa aplicar la misma rigurosidad — control de versiones, code review, verificaciones automatizadas — a la documentación que aplicas al código fuente.

Los Cuatro Documentos Esenciales

Cada sistema debería tener estos cuatro docs. Responden diferentes preguntas a diferentes profundidades.

DocumentoRespondeAudienciaFrecuencia de Actualización
README¿Qué es esto? ¿Cómo lo ejecuto?Nuevos desarrolladores, usuariosCada cambio significativo
ADR¿Por qué elegimos esto?Mantenedores actuales y futurosUna vez por decisión mayor
Runbook¿Cómo lo arreglo cuando se rompe?Ingenieros on-callDespués de cada incidente
Referencia de API¿Qué hace este endpoint?Consumidores de APIAuto-generado desde código

Flujo de Trabajo Docs as Code

Desarrollador escribe docs en Markdown

Abre un pull request (mismo repo que el código)

Revisor revisa código Y docs

CI ejecuta: markdown lint, link checker, spelling

Merge → docs se publican automáticamente

Por Qué Funciona

PrincipioCómo se Aplica en Docs as Code
Control de versionesEl historial de Git muestra cuándo cambiaron los docs y por qué
Code reviewLos reviews capturan inexactitudes técnicas, no solo typos
AutomatizaciónCI asegura formato consistente y links válidos
BranchingLos cambios de docs se despliegan con el código que describen

Estructura del README

Un README debería responder estas preguntas en orden:

# Nombre del Servicio

Descripción de una línea de qué hace este servicio.

## Quick Start

Cómo ejecutarlo localmente en menos de 5 minutos.

## Visión General de Arquitectura

Diagrama de alto nivel y dependencias clave.

## Configuración

Variables de entorno requeridas con ejemplos.

## Testing

Cómo ejecutar tests unitarios, de integración y E2E.

## Deployment

Cómo se despliega este servicio (link a CI/CD, lista de ambientes).

## Troubleshooting

Errores comunes y cómo resolverlos.

## Contributing

Link a guías de contribución y código de conducta.

Architecture Decision Records (ADRs)

Los ADRs capturan el contexto y las consecuencias de decisiones técnicas significativas. Previenen debates futuros sobre “¿por qué lo hicimos así?”

Plantilla de ADR

# ADR-042: Adoptar Kafka para Event Streaming

## Estado
Aceptado

## Contexto
El servicio de órdenes necesita publicar eventos a 4 consumidores downstream. Los callbacks REST son poco confiables y crean acoplamiento fuerte.

## Decisión
Adoptar Apache Kafka como la plataforma de event streaming.

## Consecuencias

### Positivas
- Desacopla productores de consumidores
- Soporta replay para nuevos consumidores y debugging
- Maneja backpressure vía consumer lag

### Negativas
- Complejidad operativa (ZooKeeper, brokers, particiones)
- El equipo necesita aprender patrones event-driven
- La consistencia eventual requiere Saga pattern para algunos flujos

Regla general: Escribe un ADR para cualquier decisión que cueste > 2 semanas revertir.

Runbooks

Un runbook es una guía paso a paso para responder a una alerta conocida o modo de fallo.

Buena Estructura de Runbook

# Runbook: Pool de Conexiones de Base de Datos Agotado

## Síntomas
- Alerta: `db_pool_connections_exhausted`
- Impacto al usuario: Requests de la API hacen timeout después de 5 segundos

## Diagnóstico
1. Verificar uso actual del pool: `SELECT count(*) FROM pg_stat_activity;`
2. Identificar queries lentos: `SELECT * FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;`
3. Revisar logs de aplicación por leaks de conexión

## Resolución
1. Si causado por query lento: matar query, agregar índice, o escalar réplicas de lectura
2. Si causado por leak de conexión: reiniciar pods de app (temporal), luego deployear fix
3. Si persistente: aumentar tamaño del pool en config y redeployar

## Escalación
Si la resolución falla después de 15 minutos, escalar al equipo de Base de Datos on-call.

Herramientas de Documentación

HerramientaCaso de UsoProsContras
Markdown en GitREADMEs, ADRs, runbooksUniversal, versionado, gratisSin búsqueda integrada
MkDocs / DocusaurusSitios de documentación de productoBúsqueda, versionado, themingRequiere build step
Notion / ConfluenceBase de conocimiento vivaWYSIWYG, fácil colaboraciónSin versionado en git
Swagger / OpenAPIReferencia de APIAuto-generado desde códigoLimitado a superficie de API
Mermaid / PlantUMLDiagramas as codeDiagramas versionados y editablesCurva de aprendizaje

Mejores Prácticas

  • Escribe el README primero — si no puedes explicar cómo ejecutar el servicio, el servicio no está listo
  • Mantén los docs cerca del código — los docs en un repo separo se pudren más rápido que el código
  • Automatiza el chequeo de links — links rotos destruyen confianza; CI debería capturarlos
  • Usa diagramas as code — Mermaid y PlantUML mantienen diagramas versionados y editables
  • Revisa docs en PRs — un cambio de código sin cambio de doc es un PR incompleto
  • Establece una política de frescura — marca docs no actualizados en 12 meses para revisión

Errores Comunes

  • Escribir docs solo para principiantes — los expertos también necesitan docs (refs de API, vistas de arquitectura)
  • Crear un cementerio de wiki — las wikis se desactualizan porque no hay proceso de review
  • Documentar qué, no por qué — el “por qué” es lo que olvidas en 6 meses
  • Sobre-documentar — si el código es autoexplicativo, no lo expliques; explica la intención en su lugar
  • Separar docs y código en repos diferentes — la fricción del cambio de contexto garantiza que los docs no se actualicen

Preguntas Frecuentes

¿Quién debería escribir la documentación?

El ingeniero que construyó la feature. Ellos tienen el contexto. Los escritores técnicos pueden pulir, pero la fuente de verdad debe venir del implementador. Haz que escribir docs sea parte de la Definition of Done.

¿Cómo evito que la documentación se desactualice?

Trata docs desactualizados como un bug. En tu tracker de bugs, crea una etiqueta “documentation” y priorízala junto a bugs de código. Requiere actualizaciones de README en el mismo PR que cambios de código.

¿Deberíamos usar Confluence o Markdown en Git?

Usa ambos para diferentes propósitos. Markdown en Git para docs adyacentes al código (READMEs, ADRs, runbooks) que cambian con el código. Confluence/Notion para conocimiento cross-team, onboarding y docs de proceso que evolucionan independientemente.