Skip to content

Instantly share code, notes, and snippets.

@marcelgsantos
Last active March 12, 2024 19:03
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save marcelgsantos/4ae9afa37cab4da1aec4a0e7c6b93b40 to your computer and use it in GitHub Desktop.
Save marcelgsantos/4ae9afa37cab4da1aec4a0e7c6b93b40 to your computer and use it in GitHub Desktop.
Documentação de Arquitetura de Sistemas - Compilado de Perguntas e Respostas Feitas na Comunidade

Questões sobre Documentação da Arquitetura de Sistemas

1. Perguntas

Fiz algumas perguntas nas redes sociais e ferramentas de comunicação como Twitter, LinkedIn, Slack, Discord e Telegram sobre como as pessoas costumam documentar a arquitetura de sistemas.

  1. Vocês costumam desenhar diagramas para documentar a arquitetura dos sistemas que vocês constroem?

  2. O que vocês costumam representar: código, infraestrutura ou ambos?

  3. Quais ferramentas costumam utilizar: as gráficas (como Miro ou Excalidraw) ou as de texto (como Mermaid ou PlantUML)?

  4. Quais tipos de diagramas vocês costumam utilizar? C4, UML, fluxograma, MER, BPM-N ou outros?

  5. Onde vocês armazenam esses diagramas? Em markdown no próprio repositório do projeto ou em ferramentas como Confluence?

  6. Em quais situações vocês veem a utilidade desses diagramas? Ao revisitar uma lógica complexa, durante o onboarding de novos funcionários e/ou outras situações?

2. Respostas

Alex Rios (Discord)

  1. C4 de modo geral. diagramas de sequência para fluxos importantes.

  2. Infra.

  3. Excalidraw + Mermaid e C4 autogerado por código.

  4. Depende muito do que eu preciso elucidar, mas como eu citei sequência e iterações entre caixinhas para explicar fluxos sem se apoiar em nada de UML.

  5. Diagramas da codebase no repositório. O resto depende de onde mora as documentações da empresa.

  6. Onboarding, revisitar decisões do passado, ter clareza dos macro processos sem ler o código. Deixar outros times descobrirem mais sobre os sistemas sem precisar de pessoas ou trocas síncronas.

PS: Nunca é só isso ou tão simples assim, mas depende pesadamente do caso, projeto, maturidade da equipe e da empresa.

ir para as perguntas

Vinicius Mendes (Discord)

  1. Sim.

  2. Eu gosto de documentar infra e processos também.

  3. Usamos o Excalidraw mais para brainstroming e o Mermaid e o PlantUML para documentar.

  4. Vou na mesma linha do Alex. Eu costumo gerar os diagramas que eu acho que vão comunicar o que eu quero ou acho relevante comunicar. Não sigo muito uma receita de bolo de quais diagramas devem existir.

  5. A gente costuma documentar no mesmo repositório que o código, mas temos também uma base de conhecimento no Confluence para documentações que não são relacionadas diretamente a um produto específico.

  6. Onboarding, pré-planning (as tasks já podem sair do planing apontando para uma documentação do que precisa ser feito), comunicação assíncrona (não precisar explicar várias vezes a mesma coisa).

ir para as perguntas

Gui Lopes (Slack)

  1. Sim, normalmente utilizo diagramas junto com RFCs para propor soluçōes e depois de aprovado implemento. Isso é mais para mudanças grandes.

  2. Normalmente é mais high level, descrevendo como os serviços interagem com os outros e qual dependências de infraestrutura eles têm.

  3. Utilizo Lucid Chart e PlantUML.

  4. UML.

  5. Git e Google Docs (colocando no Confluence os links).

  6. Para o entendimento de toda a equipe sobre determinada mudança ou implementação mais complexa e também no onboarding.

ir para as perguntas

Rafael Neris (Slack)

  1. Sim.

  2. Ambos.

  3. Aqui estamos utilizando o PlantUML e para coisas mais rapidas usamos o draw.io.

  4. Aqui para arquitetura usamos C4, do level 1 ao 3, para documentação de estados utilizamos o diagrama de estados (UML) e para banco de dados MER.

  5. O que está em código (PlantUML) utilizamos o próprio repositório do projeto para versionar.

    1. Sempre que vamos explicar a arquitetura para alguém o desenho é util, desde um onboarding até uma apresentação sobre o projeto.
    2. Os diagramas de estado nos auxiliam muito a manter a nossa máquina de estado documentada, especificando todas as transições que podem existir no fluxo. Usamos a documentação sempre que temos alguma dúvida sobre o fluxo de estados de um produto.
    3. MER e dicionário de dados: Principalmente para os times de dados entenderem os relacionamentos e conseguirem montar um data lake mais assertivo, sem que tenham que nos consultar para entender alguma coisa da nossa modelagem. Também em onboardings, fica muito fácil o entendimento das entidades do sistema e como se relacionam.

ir para as perguntas

Vinicius Campitelli (Telegram)

  1. Para sistemas complexos, sim.

  2. Já fiz para ambos, mas geralmente mais infra.

  3. Pra coisas simples a médias, as de texto (Mermaid e até o nomnoml.com para coisas muito simples). Gosto também do draw.io, principalmente quando tiver que mostrar pra pessoas não técnicas por algum motivo.

  4. UML, MER e fluxogramas.

  5. Em um repositório de wiki.

  6. Sim, sim e para algumas reuniões com clientes quando trabalhava em software house.

ir para as perguntas

Marcel Araújo (Telegram)

  1. Lucid Charts.

  2. Infraestrutura e documentação de tópicos que não são tem como explicar em diagrama.

  3. Miro, Figma, Lucid Charts, Notion e Confluence.

  4. O que fizer mais sentido.

  5. O que fizer mais sentido.

    1. Hands over pois o mais importante é garantir que quem for assumir o ownership, tenha informações suficientes para perceber as decisões e etc.
    2. Pois, por exemplo, algumas coisas não consigo explicar como o porquê de usar terraform mas fica fácil colocar em um diagrama a big picture do que aquilo gera.
    3. Ao mesmo tempo, preciso garantir que tópicos importantes estejam documentados para que outras pessoas que assumam a minha posição percebam como e porque foi feito daquela forma.
    4. Na posição atual de arquitetura e DevOps, impossível vender ideias de arquitetura sem ppts e documentação, o porquê das minhas decisões e etc.
    5. O mais importante é tornar visível, seja qual for a ferramenta a fazer uso.

ir para as perguntas

Vitor Mattos (Telegram)

  1. Só quando é algo complexo. Diagramas ajudam a visualizar melhor o sistema e a organizar melhor a arquitetura.

  2. Ambos, depende do objetivo.

  3. PlantUML.

  4. Diagrama de classe, diagrama de sequência, normalmente UML. BPMN uso mais quando quero documentar algum processo interno da empresa.

  5. PlantUML gera código, versiono. Por exemplo: https://github.com/nextcloud/deck/blob/master/docs/resources/BoardImport.yuml Na real este especificamente fiz com yUML, é outra ferramenta similar que conheci antes do PlantUML. PlantUML é mais interessante pois tem muito mais opções de diagramas.

  6. Como comentei, para definir uma lógica mais complexa. Outro cenário é para documentar de forma visual uma arquitetura que pode soar um pouco complexa de se compreender, ajuda se isto estiver em alguma página de documentação para quem irá usar o código como consta no exemplo do link que mandei acima.

ir para as perguntas

Vinicius Reis (Telegram)

  1. Tento sempre fazer, o nível de detalhe depende doq precisa ser explicado.

  2. Depende da "audiência".

  3. https://draw.io

  4. Só faço o desenho.

  5. Junto ao código, depende do que eu fiz.

  6. Praticamente sempre.

ir para as perguntas

Carlos Alexandre (Telegram)

  1. Sim.

  2. Depende do escopo e complexidade do projeto. Atualmente uso o modelo C4 (https://c4model.com) e tem funcionado bem.

  3. Depende do time. Já usei só sequence diagram, Lucid Chart e quando o time decidiu adotar o C4, o https://adrianvlupu.github.io/C4-Builder.

  4. Todos eles, dependem do projeto. Raramente uso BPM-N, neste sentido, prefiro um event storming com os diagramas anteriores.

  5. Prefiro o Confluence porque é um GED completo. Caso use o C4 builder ou ferramentas geradoras, mesclo com um VCS como o Git.

  6. Em todas as situações. Ajuda a reduzir o bus factor, revisitar a lógica pré implementação e a participação do time de negócio.

ir para as perguntas

Neo (Twitter)

  1. Sim! Muito importante e diminui o tempo de onboarding de novos devs.

  2. Infraestrutura principalmente, código quando é algo mais complexo.

  3. Atualmente a maioria no diagrams.io e estou tentando mudar para o Archi para desenhar outros comportamentos.

  4. Te falar que o que mais uso é o diagrama abaixo que não sei realmente um nome específico, chamo de diagrama de solução. Uso também UML para relacionamentos de banco e já usei BPM.

  5. Confluence e também dentro dos README no Git.

  6. Troca de conhecimento principalmente, comunicação com outros times e onboarding de novos membros.

ir para as perguntas

Luís Cobucci (Twitter)

  1. Sim, quando é útil pra dar suporte à explicação de algum contexto, principalmente pra abranger diferentes formas de aprendizado.

  2. Ambos, mas diria que tem uma terceira categoria, algo entre as duas opções que você listou. Basicamente o segundo nível do C4. Diagramas representando os contextos do domínio também são super interessantes pra dar suporte à decisões técnicas.

  3. Ambas. Dependende do contexto. Quando escrevendo markdown (pra ADRs), prefiro usar Mermaid. O Miro é útil pra representar coisas mais complexas mas exige esforço maior pra manter atualizado.

  4. Tenho gostado bastante do C4 (focando nos 2 primeiros níveis) mas depende da necessidade, né. As vezes um diagrama de sequência é o que você precisa.

  5. Quanto mais próxima ao código melhor, pois é mais fácil de revisar e manter atualizado.

  6. Tudo o que você citou. Adicionaria: explicação de mudanças descritas em ADRs e propostas de reorganização de sistemas (ou partes deles).

ir para as perguntas

Édipo Rebouças (Twitter)

  1. Raramente, geralmente desenho os diagramas no momento da explicação/tentativa de solucionar um problema.

  2. Tudo, mas sempre o diagrama é focado em um contexto específico. Fazer um "mega" diagrama geralmente não ajuda em muita coisa.

  3. Quais ferramentas costumam utilizar: lousa, janela, celular (foto), Draw.io e Miro.

  4. Caixinhas, fluxograma. Se tiver muito inspirado faço com uma notação mais padronizada.

  5. Conflunce ou algo similar, é mais simples de editar. Quando é no código geralmente um markdown.

  6. Geralmente onboarding e também no offboarding daquele funcionário pica das galáxias que sabia a porra toda. Me utilizo também de outros documentos gerados no decorrer do trabalho, como os tickets do Jira para entender o porque certos comportamentos do sistema.

Daniel Volpato (LinkedIn)

  1. Sim.

  2. Se é diagrama de sistemas não entro em mérito de código, mas de microserviços e infra.

  3. Diagrams.net (finada draw.io), mas em alguns casos já usei PlantUML

  4. UML e fluxograma.

  5. Confluence.

  6. Para sistemas mais complexos, os diagramas ajudam muito a deixar todo mundo na mesma página. E claro que no onboarding são muito úteis.

ir para as perguntas

Ivan Rosolen (LinkedIn)

  1. Sim.

  2. Código, infra e banco.

  3. Mermaid, Diagrams.net, .dbml (banco), .apib (blueprint api).

  4. C4, MER, fluxograma.

  5. O que é possível no Git, o que é ferramenta externa, link no readme ou página do projeto em lugares tipo Confluence (aqui temos o nosso playbook).

  6. Onboarding, discussões técnicas em guildas, apresentações do projeto para outras equipes. E facilita definir contratos e integrações entre serviços.

ir para as perguntas

Marcos Dantas (LinkedIn)

  1. Sim.

  2. Quando tive a oportunidade criei diagramas do todo, infra bem como o código, afinal nós precisaríamos ver um ensaio de nossa orquestra sem uma requisição.

  3. https://whimsical.com.

  4. Mistura de C4 + Fluxo.

  5. Criar arquivos .adr.md no repositório/camada de domínio onde poder ficar mais próximo da solução de contexto.

  6. Nas duas situações, em onboardings as pessoas rapidamente podem ser convergidas a entregarem rápido, e claro na revisita de uma lógica complexa sem dúvidas.

ir para as perguntas

Luan Loose (LinkedIn)

  1. Sim.

  2. Não coloco nada relacionado ao código, mas to estudando o C4 para tentar colocar a representação.

  3. Uso mais o Miro, mas já usei o draw.io, estou dando uma olhada no PlantUML para usar o modelo C4 que comentei acima.

  4. Usamos fluxograma.

  5. Confluence.

  6. Em apresentações, onboarding para pessoa se situar, refinamento para ver em quais pontos estamos atuando e oq impacta.

ir para as perguntas

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment