1. Skip to content

1. Plantillas y Artefactos

Plantillas reutilizables para decisiones técnicas, planificación y operaciones.


1.1 📝 Introducción

Qué: Templates reutilizables para documentar decisiones, procedimientos y respuestas a incidentes.

Por qué: Evitar reinventar la rueda, mantener consistencia, facilitar onboarding.

Cómo: Usar templates como punto de partida, adaptar según necesidad.


1.2 📓 Decision Journal

Qué es: Registro de decisiones técnicas con contexto, alternativas y outcome.

Cuándo usar:

  • Decisiones arquitectónicas importantes
  • Trade-offs no obvios
  • Cambios que afectan múltiples equipos

1.2.1 Template

# Decision Journal: [Título de la Decisión]

**Fecha:** YYYY-MM-DD
**Decidido por:** [Nombre/Equipo]
**Stakeholders:** [Quiénes se ven afectados]

## Contexto
[Situación actual, constraints, por qué necesitamos decidir]

## Opciones Consideradas

### Opción 1: [Nombre]
**Descripción:** [Qué es]
**Pros:**
- [Pro 1]
- [Pro 2]

**Cons:**
- [Con 1]
- [Con 2]

**Costo estimado:** [Tiempo/dinero]

### Opción 2: [Nombre]
[Mismo formato]

### Opción 3: [Nombre]
[Mismo formato]

## Criterios de Decisión
| Criterio | Peso | Opción 1 | Opción 2 | Opción 3 |
| :--------- | :----: | :--------: | :--------: | :--------: |
| Performance | 30% | 8/10 | 6/10 | 9/10 |
| Costo | 25% | 6/10 | 9/10 | 4/10 |
| Mantenibilidad | 25% | 7/10 | 8/10 | 5/10 |
| Time to market | 20% | 5/10 | 9/10 | 3/10 |
| **Total** | | **6.6** | **8.0** | **5.5** |

## Decisión Tomada
**Opción elegida:** [Opción X]

**Razón:** [Por qué elegimos esta opción]

**Trade-offs aceptados:** [Qué sacrificamos]

## Outcome Esperado
- [Resultado 1]
- [Resultado 2]

## Outcome Real (actualizar después)
**Fecha de revisión:** YYYY-MM-DD

**Resultados:**
- [Resultado real 1]
- [Resultado real 2]

**¿Tomaríamos la misma decisión?** [Sí/No/Depende]

**Lecciones aprendidas:**
- [Lección 1]
- [Lección 2]

1.2.2 Ejemplo Real

# Decision Journal: Base de Datos para Sistema de Pagos

**Fecha:** 2015
**Decidido por:** Tech Lead + Architect
**Stakeholders:** Backend team, DevOps, Finance

## Contexto
Necesitamos elegir DB para nuevo sistema de pagos. Requisitos:
- Transacciones ACID (crítico para consistencia financiera)
- Throughput: 1000 TPS
- Latency: p99 <100ms
- Compliance: Auditoría completa de transacciones

## Opciones Consideradas

### Opción 1: PostgreSQL
**Pros:**
- ACID garantizado
- Expertise del equipo (ya usamos en otros sistemas)
- Costo bajo (open-source)

**Cons:**
- Escalado vertical limitado
- Sharding manual si necesitamos escalar horizontalmente

**Costo:** $0 (open-source) + $500/mes cloud hosting

### Opción 2: MongoDB
**Pros:**
- Escalado horizontal fácil
- Flexible schema

**Cons:**
- ACID solo en transacciones multi-documento (desde v4.0)
- Menos expertise del equipo
- Riesgo para datos financieros críticos

**Costo:** $800/mes (Atlas M30)

### Opción 3: CockroachDB
**Pros:**
- ACID + escalado horizontal
- Compatible con PostgreSQL

**Cons:**
- Menos maduro que PostgreSQL
- Costo alto
- Poca expertise del equipo

**Costo:** $2000/mes (cloud)

## Decisión Tomada
**Opción elegida:** PostgreSQL

**Razón:**
- ACID es requisito no negociable
- Equipo tiene expertise
- 1000 TPS está dentro de capacidad de PostgreSQL bien tuneado
- Si necesitamos escalar, podemos migrar a CockroachDB (compatible)

**Trade-offs aceptados:**
- Escalado horizontal más difícil (pero no necesario en corto plazo)

## Outcome Esperado
- Latency p99 <100ms
- 0 inconsistencias en transacciones
- Time to market: 2 meses

## Outcome Real
**Fecha de revisión:** 2015

**Resultados:**
- Latency p99: 45ms ✅
- 0 inconsistencias ✅
- Time to market: 2.5 meses (delay por integración con payment gateway)

**¿Tomaríamos la misma decisión?****Lecciones:**
- PostgreSQL fue la elección correcta para nuestro scale
- Invertir en monitoring desde día 1 fue clave para detectar bottlenecks temprano

1.3 ⚠️ Pre-Mortem

Qué es: Ejercicio de anticipar qué puede salir mal ANTES de lanzar.

Cuándo usar:

  • Antes de lanzar features críticas
  • Antes de migraciones complejas
  • Antes de eventos de alto tráfico

1.3.1 Template Pre-Mortem

# Pre-Mortem: [Proyecto/Feature]

**Fecha:** YYYY-MM-DD
**Participantes:** [Equipo]
**Proyecto:** [Descripción breve]

## Escenario: "El proyecto falló. ¿Qué salió mal?"

### Escenario de Fallo 1: [Título]
**Descripción:** [Qué salió mal]
**Probabilidad:** [Alta/Media/Baja]
**Impacto:** [Alto/Medio/Bajo]
**Señales de alerta:** [Cómo detectarlo temprano]
**Mitigación:** [Qué hacer para prevenir]

### Escenario de Fallo 2: [Título]
[Mismo formato]

## Plan de Mitigación Priorizado

| Escenario | Probabilidad | Impacto | Prioridad | Acción | Responsable |
| :---------- | :------------- | :-------- | :---------- | :------- | :------------ |
| [Escenario 1] | Alta | Alto | 🔴 P0 | [Acción] | [Persona] |
| [Escenario 2] | Media | Alto | 🟠 P1 | [Acción] | [Persona] |
| [Escenario 3] | Alta | Medio | 🟠 P1 | [Acción] | [Persona] |

## Checklist Pre-Launch
- [ ] [Mitigación 1 implementada]
- [ ] [Mitigación 2 implementada]
- [ ] [Monitoring configurado]
- [ ] [Rollback plan testeado]

1.4 📖 Runbook

Qué es: Procedimiento operacional paso a paso.

Cuándo usar:

  • Deployments
  • Rollbacks
  • Tareas operacionales repetitivas

1.4.1 Template Runbook

# Runbook: [Título del Procedimiento]

**Propósito:** [Para qué sirve este runbook]
**Frecuencia:** [Cuándo se ejecuta]
**Duración estimada:** [Tiempo]
**Responsable:** [Rol/Equipo]

## Pre-requisitos
- [ ] [Requisito 1]
- [ ] [Requisito 2]
- [ ] [Acceso a X sistema]

## Pasos

### 1. [Título del paso]
**Acción:**
```bash
# Comando exacto
comando --flag valor

Output esperado:

[Output esperado]

Si falla:

  • [Qué hacer]
  • [A quién contactar]

1.4.2 2. [Título del paso]

[Mismo formato]

1.5 Rollback

1.5.1 Si algo sale mal en paso X

# Comandos de rollback

1.6 Verificación

  • [ ] [Verificación 1]
  • [ ] [Verificación 2]
  • [ ] [Verificación 3]

1.7 Troubleshooting

1.7.1 Problema: [Descripción]

Síntomas: [Cómo se manifiesta] Causa: [Por qué pasa] Solución: [Cómo arreglarlo]

1.8 Contactos

  • On-call: [Slack channel / PagerDuty]
  • Escalation: [Manager / Tech Lead]
---

## 🚨 Incident Response Playbook

**Qué es:** Plan de respuesta para diferentes tipos de incidentes.

**Cuándo usar:**
- Outages
- Security breaches
- Data loss

### Template

```markdown
# Incident Response Playbook: [Tipo de Incidente]

## Severidad

| Nivel | Descripción | Ejemplo | Response Time |
| :------ | :------------ | :-------- | :-------------- |
| **SEV1** | Outage completo | Sistema down | <15 min |
| **SEV2** | Degradación severa | Latency 10x | <30 min |
| **SEV3** | Degradación menor | Feature no crítica down | <2 hours |

## Roles

| Rol | Responsabilidad | Persona |
| :---- | :---------------- | :-------- |
| **Incident Commander** | Coordinar respuesta | On-call SRE |
| **Tech Lead** | Debugging técnico | On-call Engineer |
| **Comms Lead** | Comunicación stakeholders | PM/EM |

## Response Flow

### 1. Detection (0-5 min)
- [ ] Alerta recibida (PagerDuty / Slack)
- [ ] Incident Commander asignado
- [ ] Crear incident channel (#incident-YYYY-MM-DD-HH-MM)

### 2. Assessment (5-15 min)
- [ ] Determinar severidad (SEV1/2/3)
- [ ] Identificar sistemas afectados
- [ ] Estimar impacto (usuarios, revenue)
- [ ] Comunicar status inicial

### 3. Mitigation (60 min)
- [ ] Implementar fix temporal (si es posible)
- [ ] Rollback (si es deployment reciente)
- [ ] Escalar a on-call senior (si no se resuelve en 30 min)

### 4. Resolution
- [ ] Implementar fix permanente
- [ ] Verificar que sistema está estable
- [ ] Comunicar resolución

### 5. Post-Incident (48 hours)
- [ ] Escribir post-mortem
- [ ] Identificar action items
- [ ] Asignar responsables

## Communication Templates

### Status Update (cada 30 min durante incidente)

Status: [Investigating / Identified / Monitoring / Resolved] Impact: [Descripción] ETA: [Estimado] Next update: [Tiempo]

### Resolution Message

Incident: [Título] Duration: [Tiempo] Impact: [Descripción] Root cause: [Causa] Prevention: [Qué haremos para evitarlo]

## Runbooks por Tipo de Incidente

### Database Outage
1. Check DB health: `pg_isready -h [host]`
2. Check connections: `SELECT count(*) FROM pg_stat_activity;`
3. Check disk space: `df -h`
4. If connections maxed: Kill idle connections
5. If disk full: Clear logs, expand disk
6. Escalate to DBA if not resolved in 15 min

### API Latency Spike
1. Check APM (Datadog / New Relic)
2. Identify slow endpoints
3. Check DB query performance
4. Check external dependencies
5. Scale up if traffic spike
6. Rollback if recent deployment

### Security Breach
1. **DO NOT** try to fix immediately
2. Isolate affected systems
3. Preserve evidence (logs, snapshots)
4. Escalate to Security team
5. Follow security incident protocol

1.9 🏛️ Architecture Decision Record (ADR)

Qué es: Documento ligero para decisiones arquitectónicas.

Cuándo usar:

  • Cambios arquitectónicos significativos
  • Elección de tecnologías
  • Patterns aplicados

1.9.1 Template ADR

# ADR-[número]: [Título]

**Status:** [Proposed / Accepted / Deprecated / Superseded by ADR-XXX]
**Date:** YYYY-MM-DD
**Deciders:** [Nombres]

## Context
[Descripción del problema y contexto]

## Decision
[Decisión tomada]

## Rationale
[Por qué tomamos esta decisión]

## Consequences

### Positive
- [Consecuencia positiva 1]
- [Consecuencia positiva 2]

### Negative
- [Consecuencia negativa 1]
- [Consecuencia negativa 2]

### Neutral
- [Consecuencia neutral 1]

## Alternatives Considered
- [Alternativa 1]: [Por qué no la elegimos]
- [Alternativa 2]: [Por qué no la elegimos]

## References
- [Link 1]
- [Link 2]

1.9.2 Ejemplo Real ADR

# ADR-007: Usar Event Sourcing para Sistema de Auditoría

**Status:** Accepted
**Date:** 2020
**Deciders:** Tech Lead, Architect, Compliance Lead

## Context
Necesitamos auditoría completa de cambios en datos financieros para compliance (SOC2).
Requisitos:
- Inmutabilidad de audit log
- Reconstruir estado en cualquier punto del tiempo
- Consultas eficientes de historial

## Decision
Implementar Event Sourcing para entidades críticas (Transactions, Accounts).

## Rationale
- Inmutabilidad: Events nunca se modifican, solo se agregan
- Time travel: Podemos reconstruir estado en cualquier timestamp
- Audit trail: Events son el audit log
- Compliance: Cumple requisitos de SOC2

## Consequences

### Positive
- Audit trail completo y inmutable
- Debugging más fácil (replay events)
- Cumple compliance

### Negative
- Complejidad: Curva de aprendizaje para el equipo
- Storage: Más espacio (guardamos todos los events)
- Eventual consistency: Read model puede estar desactualizado

### Neutral
- Necesitamos event store (usaremos EventStoreDB)
- Proyecciones para read models

## Alternatives Considered
- **Audit table tradicional**: Más simple pero mutable, no permite time travel
- **Database triggers**: Acoplado a DB, difícil de testear
- **Change Data Capture (CDC)**: Complejo de configurar, no es source of truth

## References
- [Event Sourcing - Martin Fowler](https://martinfowler.com/eaaDev/EventSourcing.html)
- [EventStoreDB](https://www.eventstore.com/)

1.10 📚 Recursos