← Voltar ao blog

Domain-Driven Design (DDD) e Agile: a combinação poderosa

ddd arquitetura agile

DDD (Domain-Driven Design) e Agile não competem — se complementam. DDD resolve o que construir de forma correta; Agile resolve como entregar de forma eficiente.

O que é DDD

DDD é uma abordagem de design de software que:

  • Modela o domínio do negócio — entendendo as regras, entidades e processos reais
  • Usa linguagem ubiqua — mesma terminologia entre devs e negócio
  • Divide em bounded contexts — cada contexto tem seu modelo e responsabilidade

DDD + Agile: por que funcionam juntos

Linguagem Ubiqua + User Stories

User Stories escritas com a linguagem do domínio são mais claras:

Com DDD: “Como comerciante, quero recusar o pedido quando o estoque reservado expira…” Sem DDD: “Como usuário, quero cancelar o pedido quando acabar o estoque…”

A versão com DDD é mais precisa porque usa termos do domínio.

Bounded Contexts + Feature Teams

Cada bounded context pode ser dono de um squad:

Squad Checkout:   contexto "Pagamento"
Squad Catálogo:   contexto "Produto"
Squad Logistics: contexto "Entrega"

Cada squad tem autonomia sobre seu contexto. Dependencies são explícitas (anti-corruption layer entre contextos).

Event Storming + Planning Poker

Event Storming é um workshop onde o time mapeia eventos do domínio:

"Pedido Criado" → "Pagamento Processado" → "Estoque Reservado" → "Item Enviado"

Após o Event Storming, estimar com Planning Poker é natural — cada evento do domínio vira uma ou mais user stories.

Estimativas com DDD

Bounded contexts maduros vs. novos

  • Contexto existente: estimativas precisas porque o modelo está claro
  • Contexto novo: adicione +30-50% para descobrir o modelo do domínio

Complexidade de integração

“Integrar contexto de Pagamento com contexto de Entrega: 8 pontos” Inclui definir anti-corruption layer, contratos e eventos.

Refatoração do modelo

Se o modelo do domínio está errado (descoberta tardia):

“Refatorar modelo de ‘Cliente’ para separar Pessoa Física de Jurídica: 13 pontos”

DDD em sprints

SprintAtividade DDDAtividade Agile
1Event Storming do domínioRefinar histórias baseadas no mapa
2Definir bounded contextsImplementar primeiro contexto
3-5Refinar modelo iterativamenteEntregar features dentro do contexto
6+Identificar novos contextosExpandir para próximo contexto

Anti-padrões

DDD em tudo

“Cada feature precisa de agregados, value objects, domain events.” CRUD simples não precisa de DDD. Use para domínios complexos.

DDD sem Agile

“Vamos modelar todo o domínio antes de codificar.” DDD deve evoluir iterativamente, não em Big Design Upfront.

Conclusão

DDD e Agile juntos produzem software que reflete o domínio real do negócio (DDD) entregue de forma incremental e testada (Agile). Use DDD para entender o quê. Use Agile para entregar como.