← Projetos

Tutorial

C4 Studio: arquitetura de software em quatro níveis de zoom

O que é o modelo C4, de onde veio, a teoria por trás dele, como modelar passo a passo, como usar o app para desenhar, simular e documentar, e prompts de IA para ajudar sem perder o controle.

O que é o modelo C4

O modelo C4 é uma forma de desenhar a arquitetura de um software em vários níveis de detalhe. O site oficial o descreve como um jeito de criar “mapas do seu código”, aproximando e afastando a visão como num aplicativo de mapas. [1] O nome vem dos quatro diagramas principais: Contexto, Contêineres, Componentes e Código. [7]

Ele resolve um problema conhecido: o diagrama de “caixinhas e setas” que cada pessoa desenha de um jeito, sem dizer o que é cada caixa nem o que significa cada seta. O C4 define um pequeno vocabulário (pessoa, sistema, contêiner, componente) e uma hierarquia entre eles. Com isso, todos sabem em que nível de zoom estão olhando.

Este tutorial explica a teoria e depois a pratica no C4 Studio, um app em um único arquivo HTML. Com ele você desenha os diagramas, simula por onde passam as chamadas e o que cai quando algo falha, e gera a documentação. Nada é enviado para a rede: o projeto fica salvo no seu navegador.

Abrir o C4 Studio

↑ Voltar ao topo

Uma breve história

O C4 foi criado pelo arquiteto de software Simon Brown, a partir do que ele via ao ensinar equipes a desenhar arquitetura. [5] A linha do tempo traz os marcos, com as datas das fontes consultadas.

1995: Kruchten publica o modelo de visões “4+1”. 2006–2009: Raízes do C4, com Simon Brown, inspiradas em UML e no 4+1. 2010: Os diagramas ganham nome: contexto, contêineres, componentes e classes. 2011: Primeiro uso do nome “C4”, na QCon London. 2015–2018: “Classes” vira “Código” (as fontes divergem sobre a data). 2018: Artigo na InfoQ ajuda a popularizar o modelo.
Do modelo de visões 4+1, de 1995, ao C4 de hoje
  • 1995. Philippe Kruchten publica o modelo “4+1”: quatro visões da arquitetura (lógica, de processo, de desenvolvimento e física) ilustradas por cenários, a “+1”. A ideia de olhar o mesmo sistema por perspectivas diferentes é uma das inspirações do C4. [9][5]
  • 2006 a 2009. Surgem as raízes do modelo, inspiradas em UML e no 4+1. [5][8]
  • 2010. Os tipos de diagrama ganham nome: contexto, contêineres, componentes e classes. [5]
  • 2011. O nome “C4” aparece pela primeira vez, numa palestra na QCon London. O último C ainda era de “classes”. [6]
  • 2015 a 2018. “Classes” vira “Código”. O FAQ do site dá 2015–2016, e a página de história diz que a troca só se completou em março de 2018. [5][6]
  • 2018. Um artigo de Simon Brown na InfoQ, junto com o site oficial sob licença Creative Commons, ajuda a popularizar a técnica. [7][8]

Brown também escreveu o livro Software Architecture for Developers e fundou o Structurizr, ferramenta que gera vários diagramas a partir de um único modelo. [11][8] O site e os exemplos estão sob a licença Creative Commons Atribuição 4.0. [1]

↑ Voltar ao topo

A teoria: as abstrações

O C4 começa pelas abstrações, e não pelos desenhos. São cinco, e cada uma está dentro da anterior: um sistema tem contêineres, um contêiner tem componentes, um componente é feito de código. [2]

AbstraçãoO que éExemplo
PessoaQuem usa os sistemas: um papel, um ator, uma persona.Leitor, bibliotecário
Sistema de softwareO nível mais alto: algo que entrega valor aos seus usuários, humanos ou não. Muitas vezes coincide com o que um time mantém.Sistema da biblioteca, serviço de e-mail
ContêinerUma aplicação ou um armazenamento de dados: uma fronteira de execução em que roda código ou ficam dados. É a unidade que se implanta.Site, API, banco de dados, fila, tarefa agendada
ComponenteUm agrupamento de funcionalidades relacionadas atrás de uma interface bem definida, dentro de um contêiner. Não é implantado separadamente.Serviço de reservas, repositório de livros
CódigoOs blocos da linguagem que formam um componente: classes, interfaces, funções, enums.ReservaService, LivroRepository

Contêiner não é Docker. O próprio site avisa: no C4, contêiner é uma aplicação ou um armazenamento de dados. [2] Um banco de dados é um contêiner mesmo que rode num servidor comum, e dois contêineres Docker da mesma aplicação continuam sendo um contêiner C4.

Mitos comuns

  • “Preciso dos quatro níveis”

    Não. Contexto e contêineres bastam para a maioria dos times. Use os outros só quando agregarem valor. [3]

  • “C4 é uma notação”

    É um conjunto de abstrações e diagramas. O site diz que ele é independente de notação: formas e cores ficam a seu critério, desde que haja legenda. [1][4]

  • “C4 substitui UML”

    Ele nasceu inspirado em UML e convive com ela. Os diagramas dinâmico e de implantação, por exemplo, se baseiam nos de comunicação e de implantação da UML. [3]

  • “Microsserviço é componente”

    Um microsserviço que roda e é implantado sozinho é um contêiner (ou um sistema, se tiver vários contêineres e outro time). Componente não se implanta separado. [2]

↑ Voltar ao topo

Os quatro níveis e os diagramas extras

Cada diagrama principal dá um zoom no elemento destacado do anterior. Para cada nível, o site informa o escopo, o público e se vale a pena fazer. [3]

1. Contexto: O sistema, quem o usa e com quem ele fala; para quem: todos, inclusive quem não é técnico; recomendado. 2. Contêineres: Aplicações e bancos de dados do sistema; para quem: equipe técnica, operação e suporte; recomendado. 3. Componentes: As partes internas de um contêiner; para quem: arquitetos e desenvolvedores; opcional. 4. Código: Classes e interfaces de um componente; para quem: desenvolvedores (a IDE gera); raramente.
Contexto, contêineres, componentes e código: cada nível amplia uma parte do anterior
DiagramaEscopoMostraRecomendado?
Contexto do sistemaUm sistemaO sistema, as pessoas que o usam e os sistemas com que ele se liga diretamenteSim, para todos os times
ContêineresUm sistemaAs aplicações e os armazenamentos de dados dentro dele, com tecnologias e protocolosSim, para todos os times
ComponentesUm contêinerOs componentes dentro de um contêinerSó se agregar valor; considere gerar automaticamente
CódigoUm componenteClasses e interfaces, como num diagrama de classes UMLNão: as IDEs geram sob demanda
Panorama do sistemaUma empresa ou áreaUm contexto sem foco num único sistema: todos os sistemas e pessoasSim, sobretudo em organizações grandes
DinâmicoUma funcionalidade ou caso de usoComo os elementos colaboram em tempo de execução, com as chamadas numeradasCom moderação, para fluxos complicados ou recorrentes
ImplantaçãoUm ambiente (produção, homologação…)Onde cada contêiner roda: nós de infraestrutura, servidores, serviços de nuvemSim

O público muda com o zoom: o diagrama de contexto é para todos, inclusive quem não é técnico; o de contêineres é para a equipe técnica, a operação e o suporte; o de componentes, para arquitetos e desenvolvedores. [3]

↑ Voltar ao topo

As regras de notação

O C4 não impõe formas nem cores, mas pede que cada diagrama se explique sozinho. [4] A figura mostra o que cada elemento e cada relação devem trazer.

API de Reservas [Contêiner: Java / Spring Boot] → Lê e grava [SQL/TCP] → Banco de Dados [Contêiner: PostgreSQL]. 1: Nome do elemento. 2: Tipo e, em contêineres e componentes, a tecnologia. 3: Descrição curta das responsabilidades. 4: Rótulo com verbo, no sentido da seta (evite “Usa”). 5: Tecnologia ou protocolo da relação. Todo diagrama também tem título (tipo e escopo) e legenda.
Nome, tipo, tecnologia e descrição no elemento; rótulo e protocolo na relação
  • Título com o tipo e o escopo do diagrama, como “Diagrama de contêineres do Sistema da Biblioteca”.
  • Legenda que explique formas, cores, linhas e setas.
  • Tipo explícito em cada elemento (Pessoa, Sistema de Software, Contêiner, Componente) e uma descrição curta das responsabilidades.
  • Tecnologia em todo contêiner e componente.
  • Relações num só sentido, cada uma com um rótulo coerente com a seta. Evite palavras soltas como “Usa”.
  • Protocolo nas relações entre contêineres, que costumam ser comunicação entre processos.
  • Siglas que todo o público entenda, ou explicadas na legenda. Cores, se usadas, com o mesmo significado em todos os diagramas.

O site transforma essas regras num checklist de perguntas de sim ou não, como “o diagrama tem título?” e “cada seta tem um rótulo que descreve a intenção da relação?”. [4] O C4 Studio ajuda em várias delas: a linha de tipo ([Contêiner: React]) aparece sozinha, a legenda se monta com os tipos usados, e a documentação gerada aponta elementos sem descrição e relações sem tecnologia.

↑ Voltar ao topo

Como modelar, passo a passo

Com as abstrações e as regras em mãos, o trabalho segue uma ordem simples, de fora para dentro:

  1. Escolha o escopo. Um sistema de software, de preferência o que um time mantém. Se o assunto é a empresa inteira, comece pelo panorama.
  2. Desenhe o contexto. Ponha o sistema no centro. Pergunte quem o usa (pessoas e papéis) e com quais sistemas ele troca dados, e em que sentido. Ignore tecnologia por enquanto.
  3. Dê zoom nos contêineres. O que roda separado dentro do sistema? Cada aplicação, banco, fila e tarefa agendada vira um contêiner, com tecnologia. Cada seta ganha protocolo. Repita as pessoas e os sistemas externos do contexto que se ligam a esses contêineres.
  4. Vá aos componentes só onde precisar. Um contêiner complexo ou crítico pode merecer um diagrama de componentes. Para documentação de longa duração, gere esse nível a partir do código, se puder. [3]
  5. Pule o código, em geral. A IDE mostra as classes quando alguém precisa delas.
  6. Acrescente os diagramas extras que responderem a uma pergunta real: “onde isso roda?” (implantação), “o que acontece quando o cliente compra?” (dinâmico), “quais sistemas a empresa tem?” (panorama).
  7. Revise com o checklist e mantenha os nomes iguais em todos os diagramas. O mesmo elemento deve ter o mesmo nome no contexto e nos contêineres.

Para fixar

  • Abstrações primeiro, desenho depois.
  • Contexto e contêineres resolvem a maioria dos casos.
  • Cada nível amplia um único elemento do nível anterior.
↑ Voltar ao topo

A tela do app

Na primeira vez, o C4 Studio abre o exemplo Loja Online, com sete diagramas: panorama, contexto, contêineres, componentes, código, dinâmico e implantação. Vale passear pelas abas antes de desenhar. Para voltar a ele depois, use Arquivo → Carregar exemplo.

Tela do C4 Studio com o exemplo Loja Online aberto no diagrama de contêineres: abas dos sete diagramas no alto, paleta de elementos à esquerda, área de desenho no centro e painel do diagrama à direita
O exemplo Loja Online, na aba do diagrama de contêineres
Barra do alto
Uma aba por diagrama, com o nível antes do título, e + para criar outro. À direita: desfazer e refazer, ▶ Simular, Documentar, Arquivo ▾ e Exportar ▾.
Paleta (Elementos)
Clique num item para criá-lo no centro da tela, ou arraste-o até o ponto desejado. Embaixo há um resumo dos atalhos.
Área de desenho
Arraste o fundo para mover a vista e use a roda do mouse para o zoom. No canto, −, a porcentagem (volta a 100%), + e Ajustar, que enquadra o diagrama.
Painel à direita
Muda conforme a seleção: Diagrama (nada selecionado), Elemento, Fronteira, Relação, vários elementos selecionados ou Simulação.

Elementos da paleta

Cada item corresponde a uma abstração do C4 e a uma macro do C4-PlantUML, usada na exportação. [10]

Na paletaAbstração C4Exporta como
Pessoa / Pessoa externaPessoaPerson / Person_Ext
Sistema de software / Sistema externoSistema de softwareSystem / System_Ext
Contêiner, App web / mobileContêinerContainer
Banco de dadosContêiner (dados)ContainerDb
Fila / TópicoContêiner (mensagens)ContainerQueue
ComponenteComponenteComponent
Classe / interfaceCódigoComponent, com o estereótipo como tecnologia
FronteiraLimite de um sistema, contêiner, empresa ou nóSystem_Boundary, Container_Boundary ou Boundary, conforme o tipo

O campo Nível C4 de cada diagrama aceita Panorama do Sistema, Contexto do Sistema, Contêineres, Componentes, Código, Dinâmico, Implantação e Outro. O app não impede misturar níveis: quem garante a coerência é você.

↑ Voltar ao topo

Seu primeiro diagrama de contexto

Vamos modelar o sistema de uma biblioteca municipal. Leitores pesquisam e reservam livros, bibliotecários registram empréstimos, e o sistema manda avisos por e-mail. Faça cada passo no app:

  1. Abra o C4 Studio e escolha Arquivo → Novo projeto. Confirme. (Dá para desfazer com Ctrl+Z.)
  2. Com nada selecionado, o painel mostra Diagrama. Em Título, escreva Biblioteca Municipal. Deixe o Nível C4 em Contexto do Sistema, escreva uma Descrição e marque Mostrar legenda.
  3. Clique em Pessoa na paleta. O elemento surge no centro, com o nome já selecionado: escreva Leitor. Em Descrição, escreva Pessoa que pesquisa, reserva e empresta livros. Arraste-o para o alto, à esquerda.
  4. Crie outra Pessoa, Bibliotecário (Funcionário que cadastra livros e registra empréstimos.), e arraste-a para o alto, à direita.
  5. Crie um Sistema de software, Sistema da Biblioteca (Catálogo, reservas, empréstimos e devoluções.), no centro, e um Sistema externo, Serviço de E-mail (Envia e-mails transacionais.), embaixo.
  6. Para ligar, clique no Leitor. Aparece um círculo laranja à direita dele: arraste esse círculo até o Sistema da Biblioteca e solte quando o destino ficar com contorno verde.
  7. A relação nasce com o rótulo Usa já selecionado. Troque por Pesquisa e reserva livros e, em Tecnologia / protocolo, escreva HTTPS.
  8. Faça o mesmo do Bibliotecário para o sistema (Registra empréstimos e devoluções, HTTPS) e do sistema para o e-mail (Envia avisos de devolução, SMTP).
  9. Clique no fundo e depois em Ajustar.
Relação do Sistema da Biblioteca para o Serviço de E-mail selecionada, em laranja, com o painel Relação à direita mostrando a descrição Envia avisos de devolução, a tecnologia SMTP, o estilo tracejado e as opções Bidirecional e Não bloqueante
Uma relação selecionada: rótulo, protocolo e estilo ficam no painel Relação
Diagrama de contexto pronto: Leitor e Bibliotecário no alto ligados ao Sistema da Biblioteca, que se liga ao Serviço de E-mail embaixo, com legenda à direita e o painel mostrando 4 elementos e 3 relações
O diagrama de contexto da biblioteca: 4 elementos e 3 relações

Repare no que o app fez por você: a linha [Pessoa] ou [Sistema de Software] em cada caixa, as setas tracejadas (estilo padrão do C4 no app) e a legenda só com os tipos usados. Com duplo clique num elemento, o cursor vai direto para o nome.

↑ Voltar ao topo

Descer para os contêineres

Agora o zoom no Sistema da Biblioteca: o que roda dentro dele?

  1. Clique no + ao lado das abas. O diagrama novo já vem com o nível seguinte, Contêineres. Dê o título Biblioteca — Contêineres e marque Mostrar legenda.
  2. Volte à aba do contexto, selecione o Leitor e clique em Copiar para outro diagrama. O navegador pergunta o número do diagrama de destino: confirme 1. Faça o mesmo com o Serviço de E-mail. A cópia leva nome e descrição, para que os dois diagramas usem os mesmos nomes.
  3. Na aba de contêineres, crie uma Fronteira chamada Sistema da Biblioteca. Em diagramas de contêineres, o Tipo da fronteira já vem como Sistema de Software. Aumente a Largura para 800 e a Altura para 560. Para mover a fronteira, arraste a borda tracejada.
  4. Dentro da fronteira, crie um App web / mobile, Site da Biblioteca (tecnologia React); um Contêiner, API (Java / Spring Boot); e um Banco de dados, Banco de Dados (PostgreSQL). Ponha o leitor acima da fronteira e o e-mail à direita, do lado de fora.
  5. Ligue: Leitor → Site (Pesquisa e reserva livros, HTTPS), Site → API (Chama a API, JSON/HTTPS), API → Banco (Lê e grava, SQL/TCP) e API → E-mail (Envia avisos de devolução, SMTP).
  6. Clique no fundo e em Ajustar. O painel deve mostrar 5 elementos · 4 relações: a fronteira não conta como elemento.
Diagrama de contêineres: o Leitor no alto liga-se ao Site da Biblioteca, que chama a API, que lê e grava no Banco de Dados; os três ficam dentro da fronteira tracejada Sistema da Biblioteca, e a API envia avisos ao Serviço de E-mail, fora da fronteira
O zoom no Sistema da Biblioteca: três contêineres dentro da fronteira

Quando você move uma fronteira, tudo que está inteiramente dentro dela vai junto. Por isso, posicione a fronteira antes de pôr os contêineres dentro. Se um elemento ficar escondido atrás de outro, use os botões de Sobreposição do painel ou Ctrl+] e Ctrl+[.

↑ Voltar ao topo

Organizar o diagrama

Diagramas bagunçados são difíceis de ler. Selecione vários elementos com Shift+clique, ou com Shift arrastando no fundo para desenhar um retângulo de seleção. O painel passa a mostrar as ferramentas de arrumação.

Três contêineres selecionados com contorno laranja; o painel 3 elementos selecionados mostra a referência Banco de Dados e os grupos Alinhar, Distribuir, Espaçamento, Dimensionamento e Sobreposição
Com vários elementos selecionados, o painel oferece alinhar, distribuir e dimensionar
  • Alinhar: pelas bordas ou pelo centro, na horizontal e na vertical.
  • Distribuir: espaços iguais entre três ou mais elementos.
  • Espaçamento: enfileira os elementos com a distância que você escolher, em pixels.
  • Dimensionamento: copia a largura, a altura ou o tamanho da referência, o último elemento clicado (contorno mais forte), ou aplica um tamanho digitado.
  • Ajustar altura ao texto, Encaixar na grade e Remover sobreposições, que afasta elementos encavalados.

Atalhos

TeclasAção
DelExcluir a seleção (as relações ligadas vão junto)
Ctrl+DDuplicar a seleção, com as relações entre os duplicados
Ctrl+Z / Ctrl+Shift+ZDesfazer / refazer
Ctrl+ASelecionar todos os elementos
Setas / Shift+setasMover 10 / 50 pixels
Alt ao arrastarIgnorar a grade
Espaço + arrastarMover a vista mesmo sobre um elemento
0Ajustar o diagrama à tela
Ctrl+] / Ctrl+[Avançar / recuar na sobreposição; com Shift, para a frente / para trás
Ctrl+SSalvar o projeto em .json
EscLimpar a seleção, fechar janelas ou sair da simulação
↑ Voltar ao topo

Simular fluxos e falhas

Um diagrama C4 é estático. O C4 Studio acrescenta uma leitura dinâmica das relações: clique em ▶ Simular. Uma faixa verde avisa que o diagrama não é alterado, e a paleta fica desativada. Esc ou Sair da simulação voltam à edição.

Fluxo de chamadas

Na aba Fluxo de chamadas, clique num elemento. O app segue as setas a partir dele, em ondas: o passo 1 são os destinos diretos, o passo 2 os destinos desses, e assim por diante. Relações bidirecionais valem nos dois sentidos. O painel lista cada passo com o rótulo e o protocolo e conta quem foi alcançado. A Velocidade controla a animação, e Repetir roda de novo.

No diagrama de contêineres da biblioteca, a partir do Leitor, o resultado foi: 5 alcançados, 0 fora do caminho, 3 passos.

Simulação de fluxo a partir do Leitor: elementos em verde com selos Origem, Passo 1, Passo 2 e Passo 3; o painel mostra 5 alcançados, 0 fora do caminho e 3 passos, com a lista das chamadas de cada passo
O fluxo a partir do Leitor percorre o diagrama em três passos

Elementos fora do caminho merecem atenção: ou não participam daquela jornada, o que é normal, ou falta uma relação no diagrama.

Falhas

Na aba Falhas, cada clique tira um elemento do ar (clique de novo para restaurar). A regra de leitura é: uma relação A → B significa “A depende de B”. Se B cai, A fica indisponível, e a falha se propaga para quem depende de A. Três ajustes mudam o resultado:

  • Regra de propagação. Com redundância (padrão): dependências do mesmo tipo e da mesma tecnologia contam como cópias uma da outra, e a origem só cai se todas caírem. Sem redundância: qualquer dependência fora do ar derruba quem depende dela.
  • Não bloqueante. Marcada no painel da relação, faz a falha do destino apenas degradar a origem, sem derrubá-la. Serve para chamadas assíncronas ou opcionais.
  • Encontrar pontos únicos de falha. Testa cada elemento sozinho, com a regra com redundância, e lista os que derrubam outros, do pior para o menor. Clicar num item da lista simula aquela falha.
Simulação de falhas com o Banco de Dados fora do ar, marcado com um X vermelho; API, Site da Biblioteca e Leitor aparecem como indisponíveis; o painel mostra 4 indisponíveis, 0 degradados e 1 normal, e a lista de pontos únicos de falha
Com o banco fora do ar, a falha sobe até o leitor

Um experimento

No diagrama de contêineres da biblioteca, os pontos únicos de falha listados foram: Serviço de E-mail e Banco de Dados (cada um derruba 3), API (derruba 2) e Site da Biblioteca (derruba 1). Depois, a relação API → Serviço de E-mail foi marcada como não bloqueante, já que um aviso pode esperar. Os contadores do painel, nas três situações:

SituaçãoIndisponíveisDegradadosNormais
Banco de Dados fora do ar401
Serviço de E-mail fora, relação bloqueante401
Serviço de E-mail fora, relação não bloqueante131

O elemento que cai entra na conta dos indisponíveis. Com a relação não bloqueante, só o e-mail fica indisponível, e API, site e leitor passam a degradados. Isso não mede disponibilidade real: é uma leitura das dependências que você desenhou. Se uma seta falta ou está no sentido errado, a simulação erra junto. Use-a para fazer perguntas ao time, como “o que acontece mesmo com o site se o servidor de e-mail cair?”.

No exemplo Loja Online, aba de contêineres, o pior ponto único de falha apontado é a Fila de Pedidos, que derruba 6 elementos.

↑ Voltar ao topo

Documentar, exportar e salvar

Documentar

O botão Documentar monta um documento de arquitetura a partir do diagrama atual ou de todos os diagramas do projeto. Para cada diagrama, ele traz nível, descrição, as Notas para a documentação do painel Diagrama, a imagem, a estrutura de fronteiras e tabelas de elementos, de relações e de dependências por elemento. No fim vêm os pontos de atenção, gerados automaticamente: pontos únicos de falha, elementos sem descrição, relações sem tecnologia e elementos sem nenhuma relação.

Janela Documentação com a prévia do documento Projeto — Documentação de arquitetura, mostrando o diagrama de contêineres da biblioteca, e os botões Copiar Markdown, Baixar Markdown, Baixar HTML, Imprimir / PDF e Fechar
A documentação gerada, pronta para copiar, baixar ou imprimir

Você pode copiar o Markdown, baixar em .md ou HTML, ou imprimir e salvar em PDF. Desmarque Incluir imagens quando for colar o Markdown numa ferramenta de IA: as imagens entram como texto codificado e ocupam muito espaço.

Exportar

  • Imagem SVG e Imagem PNG (em resolução dobrada), com título e descrição embaixo do desenho.
  • Código C4-PlantUML, para versionar o diagrama como texto. As posições não vão junto: o PlantUML refaz o desenho. O código inclui a biblioteca C4-PlantUML por um endereço do GitHub, então quem renderiza precisa de acesso à internet. [10]
Janela C4-PlantUML com o código do diagrama de contêineres: System_Boundary com Container, Container e ContainerDb, Person, System_Ext e quatro Rel, terminando em SHOW_LEGEND
O diagrama de contêineres exportado como C4-PlantUML

Salvar, abrir e importar

  • Salvar projeto (.json) baixa todos os diagramas num arquivo .c4.json.
  • Abrir projeto (.json)… troca o projeto atual pelo do arquivo. Dá para desfazer.
  • Importar diagramas em novas abas (.json)… acrescenta diagramas sem mexer nos atuais. Uma janela deixa escolher quais entram e renomeá-los. Arrastar um .json para a área de desenho faz o mesmo. É o caminho para juntar o trabalho de colegas ou trazer diagramas gerados por IA.

O app não tem campo para o nome do projeto, usado no título da documentação e no nome do arquivo. Um projeto novo se chama “Projeto”. Para mudar, edite o campo "name" no .json salvo e abra-o de novo.

↑ Voltar ao topo

Prompts de IA

Uma IA ajuda a sair da página em branco, a extrair elementos de documentação espalhada e a revisar um diagrama contra as regras do C4. Ela também erra com confiança: inventa sistemas, troca o sentido das setas e confunde contêiner com componente. Trate a saída como rascunho. Para escrever prompts melhores, veja o tutorial de prompts.

1 (você): Descrever o sistema. 2 (IA): Gerar o JSON do C4 Studio. 3 (app): Importar em novas abas. 4 (você): Arrumar e passar o checklist. 5 (app): Simular falhas e documentar. 6 (você): Validar com o time. ajustar e repetir.
A IA faz o rascunho. O app confere e simula, e o time decide

Antes de colar: diagramas de arquitetura revelam nomes de servidores, fornecedores e pontos fracos. Tire endereços, senhas e nomes internos, e siga a política da sua organização para uso de IA. O app não envia nada para a rede, mas o serviço de IA recebe o que você colar.

Troque os trechos entre colchetes e cole na ferramenta de IA que você usa.

1. Entrevistar para montar o contexto

Faz a IA perguntar em vez de supor. É o melhor começo quando o sistema está só na cabeça das pessoas.

Você é um arquiteto de software que usa o modelo C4 (c4model.com).
Quero desenhar o diagrama de contexto deste sistema: [descreva em poucas frases].

Antes de propor qualquer diagrama, me entreviste:
- Faça uma pergunta por vez e espere minha resposta.
- Descubra quem usa o sistema (pessoas e papéis) e para quê, com quais sistemas externos ele troca dados, em que sentido e por qual meio, e quem é dono de cada sistema externo.
- Pergunte também o que acontece quando cada sistema externo fica fora do ar.
- Não invente respostas. Se eu não souber, registre como pendência.

Ao final, entregue:
1. Tabela de elementos: nome, tipo C4 (Pessoa, Sistema de Software ou Sistema externo) e descrição de uma frase.
2. Tabela de relações: origem, destino, rótulo com verbo no sentido da seta, tecnologia ou protocolo.
3. Lista de pendências.

2. Extrair contêineres de material existente

Para README, wiki, docker-compose ou atas. Pede a origem de cada item, o que facilita conferir.

A partir do material abaixo, extraia os elementos de um diagrama de contêineres C4 do sistema [nome].

Regras:
- No C4, contêiner é uma aplicação ou um armazenamento de dados que roda separadamente. Não é o mesmo que contêiner Docker. Bibliotecas e módulos internos não são contêineres.
- Use só o que está no material. Para cada item, cite o trecho de origem.
- Marque como [SUPOSIÇÃO] tudo que você deduziu.

Entregue:
1. Pessoas e sistemas externos.
2. Contêineres: nome, tipo (aplicação web, API, banco de dados, fila, tarefa agendada...), tecnologia e responsabilidade em uma frase.
3. Relações: origem → destino, rótulo e protocolo.
4. Contradições e o que falta saber.

Material:
"""
[cole aqui, sem senhas, endereços internos ou dados pessoais]
"""

3. Gerar o JSON para o C4 Studio

Gera um arquivo que o app importa. Salve a resposta num arquivo de texto com a extensão .c4.json e use Arquivo → Importar diagramas em novas abas (.json)…, ou arraste o arquivo para a área de desenho. Depois arrume o desenho e rode a simulação de falhas. Mantenha "Sistema de Software" escrito assim: o app usa esse texto para exportar a fronteira como System_Boundary.

Gere um arquivo JSON para o C4 Studio com dois diagramas C4 deste sistema: um de contexto e um de contêineres.
Sistema: [descreva o sistema ou cole as tabelas dos prompts 1 e 2].

Responda só com o JSON, neste formato:
{
  "format": "c4studio",
  "version": 1,
  "name": "[nome do projeto]",
  "diagrams": [
    {
      "id": "d1", "title": "...", "level": "context",
      "desc": "...", "notes": "...", "legend": true,
      "nodes": [
        {"id": "n1", "type": "person", "name": "...", "tech": "", "desc": "...", "x": 0, "y": 0, "w": 200, "h": 190}
      ],
      "edges": [
        {"id": "r1", "from": "n1", "to": "n2", "label": "...", "tech": "...", "style": "dashed", "both": false, "soft": false}
      ]
    }
  ]
}

Regras:
- level: context ou container (outros valores aceitos: landscape, component, code, dynamic, deployment).
- type: person, person_ext, system, system_ext, container, database, queue, webapp, component, code ou boundary.
- Tamanhos (w × h): person 200×190; system e system_ext 240×150; container 240×150; database 240×160; queue 260×130; webapp 240×160; component 230×140.
- No diagrama de contêineres, envolva os contêineres do sistema com um nó "boundary" com "tech": "Sistema de Software" e coloque-o primeiro na lista de nós. Os contêineres ficam inteiramente dentro dele; pessoas e sistemas externos ficam fora.
- x e y em múltiplos de 10, com pelo menos 140 de folga entre elementos. Pessoas no alto; sistemas externos embaixo ou à direita.
- ids únicos em cada diagrama; from e to sempre apontam para nós do mesmo diagrama.
- Uma relação A → B significa "A depende de B" ou "A chama B". Rótulo específico, com verbo (evite "Usa"). Em contêineres, informe a tecnologia ou o protocolo em "tech".
- Todo contêiner tem "tech", e toda descrição é uma frase curta.
- "soft": true só quando a falha do destino não impede a origem de funcionar, como um envio assíncrono de e-mail.
- Em "notes", liste as suposições que você fez.
Janela Importar diagramas em novas abas com dois diagramas do arquivo clinica.c4.json marcados, Sistema da Clínica (Contexto, 5 elementos, 4 relações) e Sistema da Clínica — Contêineres (Contêiner, 9 elementos, 8 relações), e o botão Importar 2 diagramas
Um JSON no formato do prompt 3, pronto para entrar em novas abas

4. Revisar contra o checklist do C4

Cole o Markdown de Documentar → Copiar Markdown, sem imagens. A IA olha o sentido, que as verificações automáticas não enxergam.

Revise a documentação de arquitetura abaixo, gerada pelo C4 Studio, usando as regras de notação e o checklist do modelo C4.

Confira:
1. O título, o tipo e o escopo de cada diagrama estão claros?
2. Cada elemento tem nome, tipo, descrição e, se for contêiner ou componente, tecnologia?
3. Cada relação tem rótulo específico, coerente com o sentido da seta (sem "Usa" genérico), e protocolo quando liga processos diferentes?
4. O nível de detalhe combina com o tipo de diagrama? Por exemplo: classes num diagrama de contêineres.
5. Há elementos isolados, siglas sem explicação ou responsabilidades repetidas?
6. Os diagramas se contradizem, com nomes ou relações diferentes para a mesma coisa?

Para cada problema, informe: diagrama, elemento ou relação, problema, correção sugerida e gravidade (alta, média ou baixa). Separe certeza de suspeita. Não invente fatos sobre o sistema; se depender deles, pergunte.

Documentação:
"""
[cole o Markdown]
"""

5. Explicar a arquitetura para quem não é técnico

Bom para validar o diagrama de contexto com gestores e usuários.

Explique a arquitetura abaixo para [público, como: diretoria, atendimento, auditoria], sem jargão técnico.

Entregue:
- Em três frases: o que o sistema faz, quem usa e de quais outros sistemas depende.
- Uma lista "o que acontece quando...": para cada sistema externo e cada banco de dados, o efeito de ele ficar fora do ar.
- Um glossário curto para os termos que não puderem ser evitados.
- Cinco perguntas para eu confirmar com esse público se o desenho corresponde ao que ele conhece.

Use só o que está na documentação. Se algo estiver ambíguo, diga.

Documentação:
"""
[cole o Markdown, sem as imagens]
"""

6. Tratar os pontos únicos de falha

Leva o resultado da simulação para uma conversa sobre resiliência.

O C4 Studio analisou o diagrama de contêineres abaixo e apontou os pontos únicos de falha listados.
Na simulação, uma relação A → B significa "A depende de B". Dependências do mesmo tipo e tecnologia contam como redundantes, e relações marcadas como não bloqueantes só degradam a origem.

Pontos únicos de falha:
[cole a lista de Simular → Falhas → Encontrar pontos únicos de falha]

Diagrama:
"""
[cole o Markdown da documentação, sem as imagens]
"""

Para cada ponto único de falha, proponha até duas mitigações (redundância, fila, cache, modo degradado, tempo-limite com alternativa), com custo relativo (baixo, médio ou alto) e o que muda no diagrama: elementos novos, relações novas ou relações que passam a ser não bloqueantes.
Diga quais pontos você manteria como estão e por quê. Não presuma requisitos de disponibilidade que eu não informei: pergunte.

7. Registrar uma decisão de arquitetura

O texto resultante cabe no campo Notas para a documentação do diagrama e entra no documento gerado.

Escreva um registro de decisão de arquitetura (ADR) curto para esta decisão: [ex.: pôr uma fila entre a API e o envio de avisos].

Contexto do sistema: [cole a descrição do diagrama de contêineres ou o Markdown sem imagens].

Formato:
- Título
- Status: proposta
- Contexto: o problema e as restrições, em até cinco frases
- Decisão
- Consequências: positivas, negativas e riscos
- Alternativas consideradas, com o motivo da rejeição
- Impacto nos diagramas C4: elementos e relações que entram, saem ou mudam

No máximo 300 palavras. Marque com [CONFIRMAR] o que você supôs.

8. Descer aos componentes a partir do código

Para quando um contêiner merece o terceiro nível. Depois, peça ao prompt 3 o JSON com "level": "component".

Quero o diagrama de componentes C4 do contêiner [nome], feito em [tecnologia]. Abaixo estão a estrutura de pastas e os principais arquivos.

Lembre: no C4, componente é um agrupamento de funcionalidades relacionadas atrás de uma interface bem definida, dentro de um único contêiner, e não é implantado separadamente.

Entregue:
1. Componentes: nome, tecnologia, responsabilidade em uma frase e os arquivos ou pastas que o formam.
2. Relações entre componentes e com elementos de fora do contêiner (outros contêineres, bancos, sistemas externos): origem → destino, rótulo e protocolo quando houver.
3. Partes do código que não se encaixam em nenhum componente ou parecem pertencer a mais de um.

Prefira de 5 a 12 componentes. Não liste classes uma a uma.

Estrutura:
"""
[cole a árvore de pastas e trechos relevantes, sem segredos]
"""

O que foi testado nestes prompts

O formato do prompt 3 foi testado: um JSON escrito pelo Claude com essas regras, para uma clínica veterinária, foi importado pelo menu do app (2 diagramas, com 5 e 9 elementos), simulou falhas e exportou C4-PlantUML sem erros. Nesse teste, a folga entre elementos era de 100, e alguns rótulos de relação ficaram sobrepostos; por isso o prompt pede 140. Mesmo assim, conte com ajustes manuais no desenho. Os outros prompts não foram executados, e as respostas mudam a cada vez e de uma IA para outra.

↑ Voltar ao topo

Boas práticas e erros comuns

EvitePrefira
Começar pelos componentesContexto primeiro, depois contêineres
Rótulo “Usa” em todas as setasVerbo e objeto: “Lê e grava pedidos”
Seta com duas pontas por preguiçaUma seta por intenção, no sentido da dependência
Contêiner sem tecnologia“[Contêiner: PostgreSQL]”
Biblioteca desenhada como contêinerContêiner é o que roda ou guarda dados separadamente
Servidores e redes no diagrama de contêineresInfraestrutura no diagrama de implantação
O mesmo sistema com nomes diferentes em cada diagramaCopiar para outro diagrama e manter o nome
Diagrama sem título nem legendaTítulo com tipo e escopo; Mostrar legenda marcado
Diagrama de código feito à mão e esquecidoDeixar a IDE gerar quando precisar
Tratar a simulação de falhas como medidaUsá-la para fazer perguntas sobre dependências
Aceitar o diagrama da IA sem conferirRevisar, simular e validar com o time
↑ Voltar ao topo

Revisão rápida

Tente responder antes de abrir.

1. O que significam os quatro Cs?

Contexto, contêineres, componentes e código: os quatro diagramas principais, cada um com mais zoom que o anterior.

2. Um app usa três contêineres Docker para a mesma API. Quantos contêineres C4 são?

Um. No C4, contêiner é a aplicação ou o armazenamento de dados, não a tecnologia de empacotamento.

3. Quais diagramas o site recomenda para todos os times?

Contexto e contêineres. Componentes, só se agregarem valor; código, quase nunca.

4. Onde ficam os servidores e os serviços de nuvem?

No diagrama de implantação, que mostra onde cada contêiner roda num ambiente.

5. O que há de errado com a seta “Usa” entre a API e o banco?

O rótulo é genérico e não diz a intenção. Prefira algo como “Lê e grava pedidos”, com o protocolo, como SQL/TCP.

6. Na simulação de falhas, como se lê a relação Site → API?

“O site depende da API.” Se a API cai, o site fica indisponível, a não ser que a relação seja marcada como não bloqueante.

7. A IA gerou um JSON que abriu sem erros no app. Está pronto?

Não. Abrir sem erros só prova o formato. Falta arrumar o desenho, passar o checklist, simular e validar com quem conhece o sistema.

Abrir o C4 Studio

↑ Voltar ao topo

Referências

  1. Simon Brown. The C4 model for visualising software architecture e Introduction. Fonte da analogia com mapas, da independência de notação e da licença Creative Commons Atribuição 4.0.
  2. Simon Brown. Abstractions, com as páginas de software system, container, component e code.
  3. Simon Brown. Diagrams, com as páginas de contexto, contêineres, componentes, código, panorama, dinâmico e implantação. Fonte de escopo, público e recomendação de cada diagrama.
  4. Simon Brown. Notation e Review checklist.
  5. Simon Brown. FAQ. Fonte da autoria, das raízes entre 2006 e 2009, dos nomes de 2010 e do nome “C4” em 2011. Dá a troca de “classes” por “code” em 2015–2016, o que diverge da página de história [6].
  6. Simon Brown. History. Situa o primeiro uso do nome “C4” na QCon London de 2011 e a troca definitiva de “Classes” por “Code” numa palestra de março de 2018.
  7. Simon Brown. The C4 Model for Software Architecture. InfoQ, 25 de junho de 2018.
  8. Wikipédia. C4 model. Situa a criação entre 2006 e 2011, faixa mais larga que a do FAQ [5], e atribui a popularização ao site oficial e ao artigo de 2018.
  9. Philippe Kruchten. Architectural Blueprints — The “4+1” View Model of Software Architecture. IEEE Software, 12(6), novembro de 1995, p. 42–50.
  10. plantuml-stdlib. C4-PlantUML, sob licença MIT. Fonte das macros usadas na exportação.
  11. Simon Brown. Software Architecture for Developers. Leanpub. A página do livro apresenta o autor como criador do modelo C4 e fundador do Structurizr.
↑ Voltar ao topo