La documentación de software tiene una reputación injusta. Se asocia con wikis desactualizados, diagramas que nadie lee y procesos que frenan la entrega. Pero la documentación bien hecha no es burocracia: es la diferencia entre un proyecto que puede escalar y crecer, y uno que solo puede ser mantenido por quienes lo construyeron.
Por qué documentar (y por qué nadie lo hace)
El problema no es que los desarrolladores no entiendan el valor de la documentación. El problema es que la documentación mal hecha tiene un costo real: toma tiempo, se desactualiza rápido y pocas veces se usa después de escribirse. El resultado es una resistencia cultural comprensible.
Pero la falta de documentación también tiene costos concretos: tiempo de onboarding de nuevos miembros del equipo medido en semanas, decisiones técnicas que se repiten porque nadie registró por qué se tomaron inicialmente, y dependencias conocidas solo por una persona que puede dejar el equipo en cualquier momento.
El mito de la documentación perfecta: No necesitas documentar todo. Necesitas documentar lo correcto. El objetivo es reducir la fricción cognitiva del equipo, no crear un archivo completo de todo lo que existe.
Qué documentar vs qué no
Antes de escribir una sola línea de documentación, la pregunta más importante es: ¿quién va a leer esto, cuándo, y para hacer qué? Si no tienes una respuesta clara, probablemente no vale la pena documentarlo.
Documenta con alta prioridad: cómo configurar el entorno de desarrollo local, qué hace el sistema y cuáles son sus límites, por qué se tomaron las decisiones técnicas más importantes, cómo consumen la API los clientes externos, y cómo hacer un deploy a producción.
No dediques tiempo a documentar: la lógica obvia que cualquier desarrollador puede leer directamente en el código, diagramas de flujo de código que simplemente repiten lo que el código dice, ni documentos de diseño que nadie actualizará después de la primera semana.
El README efectivo
El README es la puerta de entrada a cualquier proyecto. Un buen README responde cinco preguntas en los primeros dos minutos: ¿qué hace este proyecto?, ¿cómo lo instalo?, ¿cómo lo uso?, ¿cómo contribuyo?, y ¿quién lo mantiene?
Descripción y propósito
Una o dos oraciones que expliquen qué problema resuelve el proyecto y quién lo usa. Sin jerga interna ni siglas que solo entiende el equipo original.
Prerequisitos y setup
Lista exacta de dependencias (con versiones), comandos de instalación en orden, y cómo verificar que el setup funcionó. Un nuevo desarrollador debe poder correr el proyecto localmente con solo leer esta sección.
Cómo usarlo
Ejemplos concretos con comandos reales, no genéricos. Si hay múltiples modos de uso, documenta el caso más común primero.
Arquitectura y estructura
Un párrafo o diagrama simple que explique la estructura de directorios o los módulos principales. No necesita ser un diagrama C4 completo; con orientación básica es suficiente para onboarding.
Architecture Decision Records (ADRs)
Los ADRs son documentos cortos que registran decisiones técnicas: por qué se eligió PostgreSQL en lugar de MongoDB, por qué se adoptó una arquitectura de microservicios o por qué se abandonó una librería de terceros. Son quizás el artefacto de documentación con mayor retorno sobre la inversión.
Un ADR típico incluye: título, fecha, estado (propuesta / aceptada / deprecada), contexto (cuál era el problema), decisión (qué se eligió), y consecuencias (ventajas e inconvenientes de la decisión). No debe tener más de una página.
Los ADRs evitan el antipatrón "¿por qué hacemos esto así?" Al revisar código legacy o incorporar un nuevo desarrollador, los ADRs son la diferencia entre entender el sistema y reescribirlo por no entender sus restricciones históricas.
Herramientas para gestionar ADRs: adr-tools (CLI), carpeta /docs/decisions/ en el repositorio con archivos Markdown numerados, o directamente en Notion/Confluence con una plantilla estandarizada del equipo.
Documentación de API con OpenAPI/Swagger
Si tu proyecto expone una API HTTP, la documentación de la API no es opcional: es parte del contrato con cualquier consumidor, interno o externo. OpenAPI (anteriormente conocido como Swagger) es el estándar de facto para describir APIs REST.
Existen dos enfoques: code-first, donde el código genera la especificación automáticamente (a través de atributos en .NET, decoradores en FastAPI, anotaciones en Spring), y design-first, donde la especificación se escribe primero y el código se genera o valida contra ella.
- .NET / ASP.NET Core: Swashbuckle o NSwag generan documentación automática desde atributos XML y anotaciones.
- Python / FastAPI: genera documentación OpenAPI automáticamente; disponible en
/docsy/redocpor defecto. - Node / Express: swagger-jsdoc + swagger-ui-express para generar la spec desde comentarios JSDoc.
La documentación de API debe incluir descripciones legibles de cada endpoint, los parámetros con sus tipos y si son opcionales u obligatorios, ejemplos de request y response en los casos más comunes, y los códigos de error posibles con su significado.
Diagramas de arquitectura
Un diagrama vale más que mil palabras, siempre que sea el diagrama correcto. El modelo C4 (Context, Containers, Components, Code) ofrece cuatro niveles de abstracción que se pueden elegir según la audiencia: un diagrama de contexto para stakeholders de negocio, un diagrama de contenedores para el equipo de desarrollo.
La trampa de los diagramas es el mantenimiento. Los diagramas guardados como imágenes en una wiki quedan desactualizados casi de inmediato. Una mejor práctica es usar diagramas como código: herramientas como Mermaid, PlantUML o Structurizr DSL almacenan los diagramas en texto plano dentro del repositorio, lo que los hace versionables, revisables en PRs y regenerables automáticamente.
Mermaid en GitHub: GitHub renderiza diagramas Mermaid directamente en archivos Markdown, lo que significa que puedes incluir diagramas de arquitectura actualizados directamente en tu README sin herramientas externas.
Herramientas recomendadas por tipo
- README y docs en Markdown: MkDocs (con Material theme) o Docusaurus para generar un sitio de documentación desde Markdown.
- ADRs:
adr-toolso plantillas Markdown en/docs/decisions/. - API: OpenAPI + Swagger UI / ReDoc / Scalar para exposición visual.
- Diagramas: Mermaid (integrado en GitHub/Notion), PlantUML, Structurizr DSL para C4.
- Wiki colaborativa: Notion, Confluence o el propio wiki de GitHub/GitLab.
- Changelogs: Conventional Commits + herramientas como
semantic-releaseogit-cliffpara generación automática.
Conclusión
La documentación efectiva no es un ejercicio de escritura masiva: es una decisión deliberada sobre qué conocimiento es demasiado valioso para vivir solo en la cabeza de alguien. Un README que funciona, ADRs que explican el "¿por qué?" detrás del código, una especificación OpenAPI actualizada, y diagramas que viven en el repositorio son los cuatro artefactos con mayor impacto para la salud a largo plazo de cualquier proyecto.
Empieza por lo más pequeño y más doloroso: el setup del entorno local. Si un nuevo desarrollador no puede correr el proyecto en menos de una hora con tu README actual, ese es tu primer problema de documentación. Resuélvelo antes de escribir cualquier otra cosa.