Transformando caos em coerência: Benefícios em definirmos os domínios sistêmicos de um produto

Vitor Rossetto
Gestão Tech Eficiente
4 min readNov 13, 2023
Event Storming

No mundo da tecnologia, a clareza é fundamental para o sucesso de qualquer projeto. Um dos pilares dessa clareza é a definição e documentação adequada dos domínios sistêmicos do seu produto. Neste artigo, exploraremos a importância desses domínios e como eles podem revolucionar o desenvolvimento de produtos de tecnologia. Afinal, a separação eficaz de responsabilidades e a identificação de onde cada funcionalidade se encaixa em seu sistema são elementos cruciais para ganhar agilidade e eficiência.

Por que os Domínios Sistêmicos são cruciais?

Para compreender o impacto dos domínios sistêmicos, precisamos entender por que eles são cruciais em produtos de tecnologia. Aqui estão alguns pontos a serem considerados:

Separação de Responsabilidades: A definição clara dos domínios permite que diferentes equipes se concentrem em áreas específicas do sistema, reduzindo conflitos e facilitando a colaboração. Dividir para conquistar!

Agilidade no desenvolvimento: Com uma compreensão sólida dos domínios, as equipes podem trabalhar de forma mais eficaz e ágil, acelerando o desenvolvimento e a entrega de novos recursos.

Organização funcional: Os domínios ajudam a organizar as funcionalidades do seu produto, tornando mais fácil a identificação de onde cada parte se encaixa e como elas interagem.

Separação de custos: É possível com a separação de domínios realizar o tagueamento dos recursos tecnológicos de cada time assim habilitando a visualização de quanto cada um custa.

Explorando Técnicas de Mapeamento de Domínio: Event Storming

Existem várias técnicas para mapear os domínios sistêmicos, mas uma das mais eficazes é o Event Storming. https://medium.com/xp-inc/event-storming-guia-b%C3%A1sico-216498f5dd2d

O Event Storming é uma abordagem colaborativa que envolve todas as partes interessadas para criar uma representação visual do seu sistema. Além disso, ele produz vários “outputs” valiosos que podem ser utilizados para melhorar a compreensão e a organização dos domínios.

Outputs do Event Storming e sua Utilização:

Aqui estão alguns dos outputs do Event Storming e como eles podem ser usados para atingir os objetivos mencionados acima:

Mapa de Eventos: Este mapa descreve as interações entre os diversos eventos no sistema. Ele ajuda na identificação clara dos limites do domínio e deve servir de documentação viva das regras de negócio do sistema.

Agregados ou Aggregates: Os agregados podem servir para definir tabelas ou documentos em banco de dados e até mesmo classes no código fonte.

Contextos delimitados ou Boundaries: Contextos delimitados são frequentemente empregados para decompor sistemas monolíticos em micro serviços. É crucial ressaltar que, em determinados cenários em que a necessidade de fragmentação de uma aplicação ocorre devido a requisitos não funcionais como desempenho, a divisão real em produção pode diferir do que foi originalmente delineado durante o processo.

Subdomínios: Podemos utilizar os subdomínios gerados no Event Storming para agregar diversos times em uma tribo por exemplo.

Exemplos práticos de utilização

Divisão de tribos / squads

Exemplo divisão tribos / squads

No exemplo acima temos 3 subdomínios : Prospect, Marketing e Segurança, neste caso, é possível criar 3 tribos utilizando exatamente os mesmos nomes dos subdomínios e no caso do Prospect, podemos quebrar em 2 ou mais squads. Exemplo : uma squad para precificação e outra para prospecção.

Divisão de serviços / micro serviços

Exemplo quebra de micro serviços

No exemplo acima temos 2 contextos delimitados, um de courrier e outro de personalização, podemos claramente quebrar em 2 micro serviços com os mesmos nomes dos contextos.

Lembrando que sempre deve-se analisar o custo que teremos nesta quebra pois dependendo do contexto a arquitetura de micro serviços pode ser mais cara que a de um monolito.

Mapeamento de APIs / Eventos

Exemplo de mapeamento de APIs / Eventos

No caso acima podemos ver que com o Event Storming podemos chegar no detalhe de mapear eventos sistêmicos que disparam entre si.

No evento “MONEY REPAID” é disparado o evento que inicia o processo “STATETEMENT REPAID” que, pensando já no design da aplicação, poderia ser transformado em um evento num sistemas de mensageria como Rabbit MQ ou Kafka.

Ao mesmo tempo, também podemos observar uma query “LIST OF WITHDRAWALS” que poderia ser convertido numa API REST que realiza esta listagem.

Casos de teste

Exemplo mapeamento de casos de teste

Como podemos ver acima, dependendo do nível de detalhe que optamos por descer no processo do Event Storming, podemos chegar até o ponto de termos mapeados os casos de teste das aplicações.

Conclusão

A definição e documentação dos domínios sistêmicos em produtos de tecnologia é um investimento valioso que paga dividendos em termos de agilidade, organização e eficiência no desenvolvimento.

O Event Storming é uma ferramenta poderosa para alcançar esses objetivos. Ao adotar essas práticas, você estará preparado para enfrentar desafios de desenvolvimento de forma mais eficaz e alcançar o sucesso em seus projetos tecnológicos.

--

--

Vitor Rossetto
Gestão Tech Eficiente

Software Engineering Manager com mais de 3 anos de experiência na área de gestão de pessoas e 10 anos de experiência na área técnica .