Documentação ágil com C4 Model

Imagine a situação onde você pede a 4 desenvolvedores para desenharem a mesma solução de e-commerce. É muito provável que eles irão gerar 4 desenhos diferentes mas funcionais, cada um com suas particularidades, ícones, setas, formatos, legendas, caixas de texto e tudo mais que for necessário para ajudar no entendimento da solução.
Apesar de funcionais todos eles precisarão de uma explicação prévia pra abordar o contexto da aplicação, o nível de detalhamento, componentes e tipos de relacionamento. Com isso é natural que venha o sentimento de padronização e para isso temos uma ferramenta robusta que nos dá esse suporte, a UML. Porém a UML tem sua complexidade e devido a isso, provavelmente nenhum dos 4 desenvolvedores criaram um diagrama em UML.
Então precisamos de uma ferramenta que seja fácil de aprender, amigável ao desenvolvedor, que auxiliem na comunicação dentro e fora das equipes de desenvolvimento e produto. Além de auxiliar na integração de novos funcionários, revisões e avaliação de arquiteturas. Assim se descreve o C4 Model, um conjunto de abstrações e diagramas independente de notação e ferramentas.
Mapeando o código
O C4 Model faz uma analogia a um mapa, como o Google Maps por exemplo, onde podemos dar um zoom in e zoom out por todo o globo, e assim o C4 faz com nosso código. Essa visão possui 4 níveis, que vai de uma visão macro até como componente do software está implementado.

Context (Level 1)
No nível de contexto, é como dar um passo para trás e olhar para o mundo inteiro em um globo. Você vê as grandes características geográficas, mas sem muitos detalhes específicos. Isso se traduz no entendimento abstrato e amplo do sistema, identificando as principais áreas e seus relacionamentos.

Containers (Level 2)
Aqui, você define os limites e agrupamentos de alto nível do sistema, como aplicativos ou serviços separados. Aqui as formas e ícones são utilizados para ajudar no entendimento do diagrama, não sendo obrigatório, poderíamos por exemplo criar todo um diagrama só com texto e blocos. É como olhar para um mapa de um país e identificar os estados.

Components (Level 3)
Ao nível dos componentes, é como analisar um mapa de uma cidade e observar os bairros e monumentos. Este nível descreve os elementos de software reutilizáveis e independentes, como bibliotecas, módulos ou micro serviços, muito semelhante ao diagrama de componentes da UML.

Code (Level 4)
Finalmente, no nível do código, é como focar em uma rua específica e ver os edifícios e lojas. Aqui, você está no nível mais detalhado, examinando o código-fonte real que implementa os componentes individuais do sistema, basicamente um diagrama de classe.

Devemos ter em mente que o C4 é uma ferramenta para comunicar o que pensamos no processo de construção do software, então você não precisa desenhar os 4 níveis, apenas diagrame o que agrega valor.
Abstrações
O C4 Model é uma ferramenta abstraction-first, isso por que abstrações ajudam a simplificar a representação do sistema e a medida que avançamos nos níveis de abstração, mais detalhes técnicos são inclusos. Para construir isso usamos os seguintes elementos:
- Pessoas: Pessoas são representações de usuários ou sistemas que utilizam seu software.
- Sistema: Software System é o maior nível de abstração que descreve algo de valor para o usuário. Podendo ser o próprio software que está desenvolvendo ou alguma outra aplicação que possua dependência com ele.
- Container: Apesar do nome containers não fazemos relação com o docker. Um container representa uma aplicação ou armazenamento de dados. Aqui podemos representar nosso back-end, front-end, banco de dados, buckets, service bus, file system, scripts… tudo aquilo que é necessário para manter o sistema de pé.
- Componentes: No mundo de desenvolvimento componente pode ter muitos significados, mas nesse contexto ele representa os componentes do nosso código, como uma classe, interface e DLLs. No C4 model componentes são publicados de forma independente.
Conclusão
O C4 é uma ótima ferramenta para transmitir e documentar arquiteturas, sejam em times pequenos ou grandes sua simplicidade auxilia no bom entendimento do desenvolvedor ou alguma parte interessada. A manutenibilidade é outro ponto favorável, pois existem várias ferramentas desde drag’n drop até texto que ajudam na manutenção por um longo tempo, particularmente gosto do draw.io e o structurizr.
Fonte: https://c4model.com