TheCodeNaked

Clean Architecture — DDD — Ep. 1 : Como criar sem saber o que será criado? (Copy)


Introdução

Vamos começar com uma provocação:
Como você pode criar algo se nem você, nem o seu cliente sabem exatamente o que será criado?

Desenvolver um sistema — seja ele qual for — é sempre uma missão complexa. E essa complexidade se aprofunda quando você ainda não compreende as engrenagens internas do negócio onde esse sistema será utilizado.

Na realidade, é mais comum do que parece encontrar clientes que, embora estejam em busca de uma solução, não têm clareza sobre o que realmente precisam. Apesar deles terem expectativas, normalmente, não possuem uma visão precisa do que desejam alcançar.

E é bom lembrar: Talvez você também não domine a problemática envolvida. Pode se tratar de um setor altamente especializado, com práticas informais, regras não escritas e decisões que só fazem sentido dentro daquele contexto específico.

Nesse cenário, o pior movimento que você pode fazer é reagir por impulso.
Evite se precipitar para parecer prestativo ou eficiente.

Pense antes de responder.

Você provavelmente vai precisar de apoio — de alguém que conheça a operação em profundidade. Alguém que possa traduzir o cotidiano da empresa em elementos compreensíveis, organizáveis, e eventualmente modeláveis.

Esse é o ponto em que muitos profissionais tropeçam: tentam resolver rápido o que exige compreensão lenta. E, sem perceber, acabam se tornando parte do problema — em vez de contribuírem para a solução.

Se você ainda acha que tudo isso é exagero, é porque ainda não enfrentou um problema de verdade.

“Precisamos de um sistema para melhorar o setor de contratos.”
Soa claro, direto. Mas não é.
É uma frase genérica, carregada de omissões e expectativas implícitas.
E o risco é alto quando se parte de premissas frágeis.

Perfeito! Dando continuidade com o mesmo tom consultivo, maduro e estratégico, agora vamos introduzir o Domain-Driven Design (DDD) como resposta natural ao cenário caótico e incerto descrito anteriormente. A ideia é mostrar que o DDD não é apenas uma técnica, mas uma postura profissional frente à complexidade real dos sistemas.

Segue a continuação:


Quando a complexidade não pode mais ser ignorada

É diante desse cenário — de incerteza, fragmentação e urgência — que surge a necessidade de um novo tipo de abordagem.
Uma abordagem que aceite o caos inicial, mas que tenha disciplina para organizar o entendimento antes de estruturar a solução.

É aqui que entra o Domain-Driven Design.
Mais do que um conjunto de padrões, DDD é uma forma de pensar o desenvolvimento a partir do domínio — ou seja, da essência do negócio.

Ao invés de começar pelo código, pela interface ou pela tecnologia, o DDD propõe outra ordem de prioridades:

Primeiro, entenda profundamente o problema que está sendo enfrentado.
Depois, estruture esse conhecimento de forma compartilhada com os especialistas do domínio.
Só então, transforme isso em uma solução coerente — tecnicamente e conceitualmente.

Parece óbvio, mas quase ninguém faz.
A maioria pula direto para o "como" — sem saber o "porquê", nem o "o quê".

Colaboração, não adivinhação

O coração do DDD está na colaboração com especialistas do negócio.
Essas pessoas — que vivem o problema todos os dias — carregam o conhecimento necessário para guiar as decisões corretas.
Mas atenção: esse conhecimento nem sempre está estruturado, e raramente está documentado.
Ele precisa ser extraído com cuidado, validado em conversas, explorado em cenários concretos.

E você, como profissional de software, não está ali para adivinhar.
Está para perguntar, ouvir, modelar, testar hipóteses — e traduzir o que foi aprendido em uma linguagem que o sistema possa entender.

Mais do que software — entendimento

Com o DDD, o sistema deixa de ser um amontoado de regras e telas, e passa a ser um reflexo fiel do entendimento que foi construído ao longo do processo.
Esse entendimento compartilhado é o ativo mais valioso do projeto.
Porque sistemas evoluem.
Mas um bom modelo — bem construído, bem nomeado, e bem fundamentado — tem o poder de resistir ao tempo.


Se quiser, posso seguir com os próximos pontos — como os conceitos de Ubiquitous LanguageBounded Context, e o papel da modelagem tática. Deseja avançar para esse trecho também?


Essa é a normalidade em projetos reais:

  • O cliente acha que sabe, mas descobre o que quer só depois que vê algo funcionando e não é aquilo que ele quer.
  • Ele não consegue expressar em palavras o que deseja, mas reconhece quando algo está errado. Mas só depois que você já criou.
  • E pior: ele muda de ideia com base naquilo que vê — e isso é psicologicamente previsível.

O próprio Steve Jobs já dizia:

"People don’t know what they want until you show it to them."
Fonte: The Innovation Secrets of Steve Jobs, Carmine Gallo

Requisitos são descobertos — não definidos

Essa não é só uma percepção empírica. É literatura técnica consolidada.

"Requirements are not gathered, they are created through an iterative process of discovery."
— Donald Gause & Gerald Weinberg
(Exploring Requirements: Quality Before Design)
Fonte: Amazon

Ou seja: quem promete “requisitos completos” na fase inicial está vendendo uma ilusão.


Escopo Fixo + Cliente Indeciso = DESASTRE

Se você entra em um projeto desses só pelo dinheiro ou só para agradar, o fim é quase sempre o mesmo:

  • A relação se desgasta;
  • O sistema nunca é “o bastante”;
  • E no final, quando o escopo estoura e os nervos também, alguém vai puxar o contrato, acionar advogados, e o que era para ser uma solução vira um campo de batalha.

É o que o lendário Fred Brooks alertava em 1975:

"The hardest single part of building a software system is deciding precisely what to build."
— The Mythical Man-Month
Fonte: Amazon

O Valor só Aparece Depois de Rodar

Toda essa abordagem está, inclusive, na base do Design Thinking e do Lean Startup:

  • O Design Thinking começa com empatia e imersão no problema, porque o cliente não sabe formular bem o que precisa.
  • O Lean Startup (Eric Ries) prega o uso de produto mínimo viável (MVP) justamente porque ninguém sabe ao certo o que vai funcionar até ver funcionando.
"Start small, learn fast, and iterate."
— The Lean Startup, Eric Ries
Fonte: theleanstartup.com

Em resumo

Não está errado em dizer que:

  • É normal o cliente não saber o que quer;
  • É perigoso fingir que sabe só para começar;
  • E é irresponsável seguir um contrato rígido em um cenário que claramente exige adaptação.

O erro está nos que ignoram isso e seguem cegamente metodologias “bonitas” que só funcionam em slides e post-its coloridos — e esquecem que a realidade é feita de processos, decisões difíceis e negociações contínuas.

Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado