1 of 64

Indo além do técnico

para desenvolver sistemas

que evoluem na

velocidade do negócio

Sebastian Ferrari - CTO@sebas5384

2 of 64

Quem?

Sebastian Ferrari (Sebas)

  • Uruguaio morando no Brasil
  • CTO e Co-fundador da Taller
  • +16 anos construindo sistemas
  • Agilista e praticante do Fluxo Unificado a vários anos
  • +3 anos como praticante de DDD e Eventstormer

Hola!

@sebas5384

3 of 64

Velocidade do Negócio?

Negócio

muda

Proposta de mudança

Processo de Desenvolv.

Novo Sistema

4 of 64

Pensamento linear

5 of 64

O sistema começa com um simples modelo da realidade se tornando cada vez mais complexo

Sistema evolui com o passar do tempo

6 of 64

Pensamento Sistêmico

Modelo mental que ajuda a

dar sentido à complexidade,

incentivando um equilíbrio entre

reducionismo e emergência.

7 of 64

O que é um sistema?

Um conjunto de elementos inter-relacionados organizados para servir a uma função específica ou

para buscar um objetivo específico.

– Donella Meadows

8 of 64

Modelo inicial,�rápido de criar.

1

2

3

.

.

.

Domínios

Modelos

9 of 64

Modelo inicial,�rápido de criar.

1

2

3

.

.

.

Evolução resultando no “Big Ball of Mud”.

Domínios

Modelos

10 of 64

Modelo inicial,�rápido de criar.

1

2

3

.

.

.

Evolução resultando no “Big Ball of Mud”.

Funciona, mas ninguém sabe como.�Mudanças se tornam arriscadas e difíceis.

Domínios

Modelos

11 of 64

complexidade do design

tempo

12 of 64

complexidade do design

tempo

13 of 64

complexidade do design

tempo

O que acha que precisa mais tarde.

O que precisa agora.

O que tem agora.

YAGNI

You Ain‘t Gonna Need It

agora

depois

14 of 64

15 of 64

Design por meio de refatoração

A coisa mais simples que possa funcionar

Realize progresso em pequenos passos

16 of 64

Grande design

prematuro

Design caótico e aleatório

Design bom e incremental

17 of 64

A complexidade no Software,

é o resultado inerente da

complexidade do domínio (essencial) misturada com a

complexidade técnica (acidental)

!?

– Scott Millet

18 of 64

Domínio?

Uma esfera específica de atividade (o que) ou conhecimento (como).

Área do problema, é o que dá motivo de existência ao modelo.

Onboarding

Vendas

Precificação

Marketing

19 of 64

Modelo do Domínio

Domínio do mundo real

Modelo do Domínio�para o caso de uso

20 of 64

O que é o DDD?

Domain Driven Design�

Abordagem de design de software, com foco na modelagem de software para corresponder a um domínio de acordo com a entrada dos especialistas desse domínio.

– Wikipedia

Eric Evans - 2003

21 of 64

Outros livros

Vaughn Vernon

22 of 64

não é meio velho?

Microsserviços

Foco no tático

Devs estão se distanciando do problema

23 of 64

Pilares

Duas categorias de design:

Tático

Estratégico

24 of 64

Pilares

Duas categorias de design:

Tático

Estratégico

Ferramentas para a modelagem e entendimento do domínio de maneira colaborativa

  • Contextos Delimitados�
  • Linguagem Ubíqua

  • Mapeamento de Contextos

25 of 64

Pilares

Duas categorias de design:

Tático

Estratégico

Padrões técnicos para construir modelos do domínio dentro do contexto delimitado:

  • Entities
  • Value Objects
  • Aggregates
  • Repository
  • Services
  • Events
  • Modules
  • Factories

26 of 64

Precisa de tudo isso?

NÃO

27 of 64

Construa entendimento coletivo se aproximando aos especialistas de domínio e desenhe o sistema com enfoque no domínio principal do negócio

Design Estratégico

28 of 64

Contexto Delimitado

  • Delimitação linguística ou conceitual
  • Limita um conceito a um determinado contexto
  • É o que dá significado a um substantivo
  • Evita ambiguidade

29 of 64

Contexto Delimitado

Reserva

Identificação e Autenticação

Usuário

Contexto

Contexto

Modelo

ambíguo

model

model

model

model

model

30 of 64

Bora fazer do zero?

NÃO

na maioria dos casos…

31 of 64

Contexto Delimitado

Reserva

Identificação�e Autenticação

Passageiro

Usuário

32 of 64

Linguagem Ubíqua

  • Linguagem utilizada dentro de um contexto
  • Sem ambiguidade
  • Sem jargões, não é uma linguagem “universal”
  • Comunicação entre especialistas do domínio�e pessoas técnicas, ou outros envolvidos
  • Faça um glossário dos conceitos por contexto

33 of 64

Organizações que desenvolvem sistemas de software tendem a produzir sistemas que são cópias das estruturas de comunicação dessas organizações.

!?

– Melvin Conway, 1967

34 of 64

Mapeamento de Contexto

Pagamento

Catálogo

Venda

U

D

Upstream/ Downstream

Parceria

35 of 64

Mapeamento de Contexto

Pagamento

Venda

U

D

Camada Anticorrupção

ACL

Compra

Ordem

36 of 64

Camada Anticorrupção

37 of 64

Mapeamento de Contexto

Contexto

Subdomínio

38 of 64

Subdomínios?

  • Core / Principal�Diferencial de seu negócio, maior investimento�
  • Suporte�Necessário para o negócio funcionar�
  • Genérico�Solução de prateleira, nada especial para o negócio

39 of 64

Domínio

Contexto

40 of 64

Como entender mais sobre a área do problema?

41 of 64

Plataforma de validação,�exploração e construção do�Storytelling do negócio�de maneira colaborativa

EventStorming

42 of 64

EventStorming?

  • Criado em 2012 que evoluiu na comunidade DDD
  • Baseado em Workshops e Gamestorming para construir narrativas com eventos
  • Modelagem colaborativa do domínio, processos, jornadas de usuário ou fluxos de trabalho
  • Começa com um canvas em branco com post-it na mão

Alberto Brandolini

43 of 64

Livro

Alberto Brandolini

Introducing�EventStorming

An act of Deliberate Collective Learning

44 of 64

Entendimento coletivo contando histórias

45 of 64

“ A ignorância é o maior impedimento para o throughput ”

!?

– Dan North

46 of 64

Quem?

Quando?

Onde?

Pra que?

47 of 64

48 of 64

Por que Eventos?

Eventos

Comportamento emergente

Propósito ou função

Interconexões / Relações

Elementos

Entender um sistema

49 of 64

Exploração

50 of 64

Gerar Caos

51 of 64

Gerar Caos

52 of 64

Estrutura emergente

53 of 64

Estrutura emergente

54 of 64

Estrutura e relações

Subdominios e Contextos

55 of 64

Validação de narrativas

56 of 64

Validação de narrativas

57 of 64

Vários sabores

  • Big Picture�Usando eventos, atores, ações e sistemas para uma visão geral do sistema envolvendo o pessoal de negócio.
  • Process Modeling�Adicionando políticas e “informações” necessárias para as ações, serve para entender ou criar novos serviços.
  • Software Design�Mergulho em contextos com tecniquês, adicionando os agregados” ou componentes do software.

58 of 64

Diferentes momentos

TO-BE

AS-IS

Oportunidades e problemas

Validação entre o ideal e viável

59 of 64

Software Design

60 of 64

Aceitando a realidade

61 of 64

Descoberta incremental

62 of 64

“ É o entendimento do desenvolvedor que se torna software, e não o do Stakeholder ”

!?

– Alberto Brandolini

63 of 64

“ Por anos juntamos vários times de uma organização e misturamos em um software ”

!?

– Alberto Brandolini

64 of 64

Manda Salve!

sebas@taller.net.br

taller.net.br

blog.taller.net.br��� Instagram: taller.team� Twitter: @tallerteamTallercast: spoti.fi/3V5w1Yk�� Estamos contratando!