Assimilando o Conhecimento

Editar no GitHub

Assimiliar o conhecimento do domínio é necessário para desenvolver um modelo rico e produzir design e modelagem de software profundos

É a criatividade das ideias e da experimentação maciça, alavancada através de uma linguagem baseada em modelos e disciplinada pelo ciclo de feedback através da implementação, que possibilita encontrar um modelo rico em conhecimento e destilá-lo. Esse tipo de assimilação do conhecimento transforma o conhecimento da equipe em modelos valiosos. [Evans, p. 13]

Modeladores de domínio eficazes digerem conhecimento. Eles tomam uma torrente de informações e saem em busca daquilo que é relevante. Experimentam uma ideia de organização após a outra, buscando a visão simples que dê sentido à massa. Muitos modelos são tentados, rejeitados ou transformados. O sucesso vem em um conjunto emergente de conceitos abstratos e que dá sentido a todos os detalhes. Essa destilação é uma expressão rigorosa do conhecimento específico considerado mais relevante. [Evans, p. 13]

A assimilação do conhecimento não é uma atividade solidária. Uma equipe de desenvolvedores e especialistas do domínio trabalha em conjunto, normalmente só o comando de desenvolvedores. Juntos, eles coletam informações e as digerem dando-lhes uma forma útil. O material puro vem das mentes dos especialistas do domínio, de usuários de sistemas existentes, de experiências anteriores da equipe técnica com um sistema legado relacionado a ele ou de outro projeto no mesmo domínio. Ele vem na forma de documentos escritos para o projeto ou utilizados no negócio, e muitas, muitas conversas. As versões iniciais, ou protótipos, dão retorno das experiências para a equipe e mudam as interpretações. [Evans, p. 13]

Bons programadores naturalmente vão começar a assimilar e desenvolver um modelo que possa executar mais serviços. Mas, quando isso acontece somente em um ambiente técnico, sem colaboração com especialistas do domínio, os conceitos são ingênuos. A superficialidade do conhecimento produz softwares que fazem serviços básicos, mas que não contam com uma ligação profunda com a forma de pensar de um especialista naquele domínio. [Evans, p. 14]

A interação entre os membros da equipe muda à medida que todos os membros digerem aquele modelo em conjunto. O constante refinamento do modelo do domínio força os desenvolvedores a aprender os princípios importantes do negócio ao qual estão dando assistência, em vez de gerar funções mecanicamente. Os especialistas do domínio geralmente refinam seu próprio entendimento, sendo forçados a destilar o que sabem em sua essência e passam a entender o rigor conceitual exigido pelos projetos de software. [Evans, p. 14]

Tudo isso faz com que os membros da equipe sejam mais competentes ao digerir o conhecimento. Eles eliminam aquilo que é estranho. E dão uma forma cada vez mais útil ao modelo. Como analistas e programadores estão contribuindo para ele, ele se torna limpo, organizado e assimilado, para que possa servir de alavanca para a implementação. Como os especialistas naquele domínio estão contribuindo para ele, o modelo reflete um profundo conhecimento do negócio. As abstrações são princípios reais daquele negócio. [Evans, p. 14]

À medida que o modelo avança, ele se torna uma ferramenta para organizar as informações que continuam a fluir pelo projeto. O modelo se concentra na análise dos requisitos, interagindo intimamente com a programação e o design. E, em um círculo virtuoso, ele aprofunda a visão que os membros da equipe têm sobre o domínio, permitindo que eles vejam com mais clareza, levando a um refinamento ainda maior do modelo. Esses modelos nunca são perfeitos; eles evoluem. Devem ser práticos e úteis em dar sentido ao domínio. Devem ser rigorosos o suficiente para tornar o aplicativo simples de implementar e entender. [Evans, p. 14]

Equipes altamente produtivas aumentam seu conhecimento conscientemente, praticando o aprendizado contínuo. Para os desenvolvedores, isso significa melhorar o conhecimento técnico, juntos com a capacidade geral de modelagem de domínios. Mas também inclui um aprendizado sério sobre o domínio específico com o qual estão trabalhando. [Evans, p. 15]

Esses membros autodidatas de uma equipe formam um núcleo sólido de pessoas para se concentrarem nas tarefas de desenvolvimento que envolvem as áreas mais críticas. O conhecimento acumulado nas mentes dessa equipe-núcleo faz com que o conhecimento seja assimilado com maior eficácia. [Evans, p. 15]

É através da assimilação do conhecimento em um trabalho de colaboração íntimo com especialistas em software que as regras são esclarecidas, acrescentadas, reconciliadas ou descartadas. [Evans, p. 16]