Para muitos desenvolvedores Java, a transição de Pleno para Senior parece estar ligada ao domínio de frameworks como Spring Boot ou à capacidade de resolver bugs complexos em produção. No entanto, a verdadeira marca de um desenvolvedor Senior é a capacidade de entender que o software é, acima de tudo, uma solução para problemas de negócio. Como afirma Alberto Brandolini: “É o entendimento (equivocado ou não) dos desenvolvedores, não o conhecimento dos especialistas de domínio, que é lançado em produção”.
Para alcançar o próximo nível na carreira, um caminho que indico é dominar o básico do Domain-Driven Design (DDD): o Domínio de Negócio e seus Subdomínios.
O Que é o Domínio de Negócio?
O domínio de negócio define a área de atividade principal de uma empresa, é o serviço que ela presta aos seus clientes. Por exemplo, o domínio da Starbucks é o café, enquanto o da FedEx é a entrega de encomendas. Outro ponto importante é que uma empresa pode operar em múltiplos domínios, como a Amazon, que atua no varejo e em serviços de computação em nuvem (AWS).
Como desenvolvedor Senior, seu papel não é apenas “traduzir” requisitos em código, mas sim compreender o contexto em que esse software existe e qual valor a organização busca obter com ele. Sem entender o problema de negócio, as soluções acabam limitadas e com grandes alterações no código quando precisarmos evoluir nossas atuais funcionalidades.
Subdomínios: As Peças do Quebra-Cabeça
Uma empresa não atinge seus objetivos operando em um único bloco monolítico. Ela se divide em subdomínios, que são áreas de atividade mais granulares. No DDD, identificamos três tipos principais de subdomínios, e saber diferenciá-los é o que guiará suas decisões arquiteturais.
1. Subdomínio Core (Core Subdomain)
Este é o coração da empresa. O subdomínio core é o que a organização faz de forma diferente e melhor que seus concorrentes; é onde reside sua vantagem competitiva.
- Características: É naturalmente complexo, volátil (muda com frequência para inovar) e de alto valor estratégico.
- Ação do Senior: O código aqui deve ser escrito internamente, usando as técnicas de engenharia mais avançadas (como Domain Model ou Event Sourcing) para garantir manutenibilidade e evolução rápida.
2. Subdomínio Genérico (Generic Subdomain)
São atividades que todas as empresas realizam da mesma maneira. Exemplos clássicos incluem sistemas de gateway de pagamentos ou serviços de envio de e-mail.
- Características: São problemas complexos e já resolvidos pelo mercado, mas que não oferecem diferencial competitivo.
- Ação do Senior: Não reinvente a roda. A estratégia aqui é comprar ou adotar soluções prontas ou bibliotecas open-source.
3. Subdomínio de Suporte (Supporting Subdomain)
Como o nome diz, ele apoia o negócio, mas não oferece vantagem competitiva. Um exemplo seria telas de entrada de dados e operações CRUD (Create, Read, Update, Delete).
- Ação do Senior: Use frameworks de desenvolvimento rápido. Como a complexidade é baixa, esses subdomínios são ótimos para treinar talentos juniores ou até para serem terceirizados.
Por que isso é vital para um Java Senior?
Entender essa divisão permite que você aplique o esforço técnico onde ele realmente traz retorno. O uso de heurísticas de design ajuda a escolher o padrão correto para cada cenário.
Se você estiver lidando com um Subdomínio Core, um padrão simples como Active Record ou Transaction Script pode levar a um “Big Ball of Mud” (grande bola de lama) devido à complexidade crescente. Nesse caso, o Senior deve propor uma arquitetura de Ports & Adapters (Hexagonal) para isolar a lógica de negócio das preocupações de infraestrutura.
Por outro lado, aplicar um Domain Model complexo, com agregados e objetos de valor, em um Subdomínio de Suporte é um erro de superengenharia (overengineering), desperdiçando recursos em algo que poderia ser resolvido com um código simples e direto.
Conclusão
Para ser Senior, você deve parar de olhar apenas para o código e começar a olhar para o mapa de valor da empresa. Identifique o que é Core, o que é Suporte e o que é Genérico. Cultive uma Linguagem Ubíqua conversando com os especialistas de domínio para garantir que o seu modelo esteja alinhado com o negócio.