El Architect: Arquitectura Tecnica

Por: Artiko
bmadarchitectarquitecturaapidatabase

El Architect: System Founder

El Architect es el tercer agente en el flujo de BMAD. Su rol es transformar los requisitos del PRD en decisiones tecnicas concretas: que tecnologias usar, como estructurar el sistema, como se comunican los componentes y como se almacenan los datos.

Se le llama System Founder porque establece los cimientos sobre los que todo el codigo se construira.

Como carga el Architect los requisitos

El Architect recibe como input los artefactos del PM:

@docs/prd.md
@docs/epics.md
@docs/user-stories/

Analiza cada requisito funcional y no funcional para tomar decisiones de arquitectura fundamentadas. No inventa: justifica cada eleccion en base a los requisitos.

Artefactos que genera el Architect

Esta fase produce cuatro documentos clave:

ArtefactoProposito
tech-stack.mdTecnologias elegidas con justificacion
ARCHITECTURE.mdDisenio del sistema, componentes y patrones
db-schema.mdEsquema de base de datos con relaciones
api-spec.jsonEspecificacion de endpoints REST

Cada documento es un contrato. El Developer no puede usar una libreria que no este en tech-stack.md ni crear una tabla que no este en db-schema.md.

Tech Stack del Kanban

El Architect evalua opciones y documenta sus decisiones:

Backend:

AspectoEleccionJustificacion
LenguajeNode.js + TypeScriptEcosistema maduro, tipado estatico, equipo familiarizado
FrameworkExpress.jsMinimalista, amplia comunidad, suficiente para API REST
ORMPrismaType-safe, migraciones automaticas, excelente DX
AuthJWT + bcryptStateless, escalable, FR-01 requiere sesiones

Frontend:

AspectoEleccionJustificacion
FrameworkReact 18Componentes declarativos, ecosistema de drag & drop
Drag & Drop@dnd-kitAccesible (NFR-03), ligero, API moderna
EstadoZustandSimple, sin boilerplate, suficiente para MVP
EstilosTailwind CSSUtility-first, rapido de prototipar

Infraestructura:

AspectoEleccionJustificacion
Base de datosPostgreSQLRelacional, ACID, soporta las relaciones boards→columns→cards
ContenedoresDocker + docker-composeEntorno reproducible, deployment consistente
TestingVitest + PlaywrightUnit tests rapidos, E2E para drag & drop

Cada fila tiene una justificacion que referencia un requisito o una restriccion. No se elige “porque si”.

ARCHITECTURE.md: Disenio del Sistema

El documento principal de arquitectura incluye un diagrama de componentes:

graph TD
    Client[React SPA] -->|HTTP/REST| API[Express API]
    API -->|Prisma ORM| DB[(PostgreSQL)]
    API -->|JWT| Auth[Auth Middleware]
    Auth -->|Valida token| API
    Client -->|Drag events| DnD[@dnd-kit]
    DnD -->|PATCH /cards/:id| API

Patron arquitectonico: El Architect elige una estructura modular por dominio, separando responsabilidades:

backend/
  src/
    modules/
      auth/          ← Registro, login, JWT
        controller.ts
        service.ts
        routes.ts
      boards/        ← CRUD de tableros
        controller.ts
        service.ts
        routes.ts
      columns/       ← Logica de columnas
        controller.ts
        service.ts
        routes.ts
      cards/         ← CRUD y movimiento de tarjetas
        controller.ts
        service.ts
        routes.ts
    middleware/
      auth.ts        ← Verificacion JWT
      error.ts       ← Manejo global de errores
    prisma/
      schema.prisma  ← Esquema de datos
    app.ts           ← Configuracion Express
    server.ts        ← Entry point

frontend/
  src/
    components/
      Board/
      Card/
      Column/
      Auth/
    stores/
    hooks/
    api/             ← Llamadas HTTP al backend

Cada modulo tiene tres capas: controller (recibe HTTP), service (logica de negocio) y routes (define endpoints). Esta separacion cumple con el principio de responsabilidad unica.

Esquema de Base de Datos

El db-schema.md define las tablas y sus relaciones:

erDiagram
    users {
        uuid id PK
        string email UK
        string password_hash
        string name
        timestamp created_at
    }
    boards {
        uuid id PK
        string name
        uuid owner_id FK
        timestamp created_at
        timestamp updated_at
    }
    columns {
        uuid id PK
        string name
        int position
        uuid board_id FK
    }
    cards {
        uuid id PK
        string title
        text description
        enum priority
        int position
        uuid column_id FK
        uuid assigned_to FK
        timestamp created_at
        timestamp updated_at
    }

    users ||--o{ boards : "owns"
    boards ||--o{ columns : "has"
    columns ||--o{ cards : "contains"
    users ||--o{ cards : "assigned_to"

Decisiones de disenio:

Especificacion de API REST

El Architect define los endpoints que el Developer implementara:

Autenticacion:

MetodoEndpointDescripcionAuth
POST/api/auth/registerRegistrar usuarioNo
POST/api/auth/loginObtener JWTNo

Tableros:

MetodoEndpointDescripcionAuth
GET/api/boardsListar tableros del usuarioSi
POST/api/boardsCrear tableroSi
GET/api/boards/:idDetalle con columnas y tarjetasSi
PUT/api/boards/:idActualizar nombreSi
DELETE/api/boards/:idEliminar tableroSi

Columnas:

MetodoEndpointDescripcionAuth
POST/api/boards/:boardId/columnsCrear columnaSi
PATCH/api/columns/:id/positionReordenar columnaSi

Tarjetas:

MetodoEndpointDescripcionAuth
POST/api/columns/:columnId/cardsCrear tarjetaSi
PUT/api/cards/:idActualizar tarjetaSi
DELETE/api/cards/:idEliminar tarjetaSi
PATCH/api/cards/:id/moveMover a otra columnaSi

Cada endpoint documenta: metodo, ruta, cuerpo esperado, respuesta exitosa y codigos de error. El Developer no necesita adivinar nada.

Decisiones y trade-offs

El Architect documenta explicitamente lo que descarto y por que:

DescartadoRazon
GraphQLOverhead innecesario para un CRUD simple
MongoDBLas relaciones boards→columns→cards favorecen SQL
WebSocketsFuera del MVP, se agrega en v2.0 si se necesita
MicroserviciosUn monolito modular es suficiente para el MVP
RedisSin cache en MVP, PostgreSQL maneja la carga esperada

Estas decisiones evitan discusiones futuras. Si alguien pregunta “¿por que no usamos GraphQL?”, la respuesta ya esta documentada.

Versionado en Git

Todos los artefactos del Architect se commitean al repositorio:

git add docs/tech-stack.md docs/ARCHITECTURE.md docs/db-schema.md docs/api-spec.json
git commit -m "docs: arquitectura tecnica del Kanban - Fase 3 BMAD"

Si durante el desarrollo se necesita un cambio arquitectonico (nueva tabla, nuevo endpoint), se actualiza primero el documento y luego el codigo. El documento es la fuente de verdad.

Revision humana

Al igual que con el PRD, el humano revisa antes de avanzar:

Solo con tu aprobacion, el Scrum Master puede comenzar a fragmentar el trabajo en stories.


← Capitulo 4: El Product Manager | Capitulo 6: El Scrum Master →