Governance

Escopo: transversal. Aplica-se a qualquer linguagem ou stack do projeto.

Governança é o conjunto de decisões sobre como o projeto é entendido e percorrido, o que vai além de como o código é escrito. A meta é uma só: qualquer pessoa que chega, do não técnico ao especialista, consegue achar o que precisa, entender o que encontrou e contribuir com contexto.

Conceitos fundamentais

ConceitoO que é
SDLC (Software Development Life Cycle · Ciclo de Vida de Desenvolvimento de Software)Conjunto de fases do desenvolvimento: design, implementação, testes, entrega, operação e manutenção
ADR (Architecture Decision Record · Registro de Decisão de Arquitetura)Documento que registra o porquê de uma decisão técnica, as alternativas consideradas e as consequências
Onboarding (integração)Processo de integração de um novo membro ao projeto, transferindo conhecimento estrutural
Landing (primeiro contato)Ponto de entrada do projeto; o que um dev vê primeiro ao abrir o repositório

No que eu acredito

Código serve o time. A melhor solução é aquela que o próximo dev consegue ler, manter e evoluir com confiança. Uma solução elegante que ninguém entende tem valor limitado, porque toda mudança nela passa a depender de quem a escreveu.

Governança cobre o ciclo completo. Cada decisão técnica produz efeitos depois do commit: na manutenção, no onboarding, na capacidade de o time crescer. Pensar em governança é antecipar esses efeitos enquanto a mudança ainda é simples de fazer.

Complexidade organizada em camadas. Todo sistema tem uma complexidade própria, que não some. O trabalho é apresentá-la em camadas: o não técnico precisa entender o que o sistema faz, e o especialista precisa entender por que cada decisão foi tomada.

Consistência ajuda a aprender. Padrões previsíveis exigem menos esforço de leitura. Um dev que aprende como um módulo funciona já sabe se achar nos outros, porque a forma se repete.

Foco no processo. Quando algo falha, a investigação vai para o processo que deixou a falha passar. Culpar quem executou deixa o processo intacto, e a falha volta com outra pessoa no lugar.

Como um staff engineer pensa

O SDLC (Software Development Life Cycle · Ciclo de Vida de Desenvolvimento de Software) começa antes do primeiro commit e termina depois do último deploy. Design, implementação, testes, entrega, operação e manutenção: cada uma dessas fases sofre o efeito das decisões tomadas hoje.

O staff engineer raciocina sobre o sistema inteiro. A pergunta que guia o trabalho deixa de ser "como implementar isso?" e passa a ser "como isso afeta o time que vai manter, o dev que chega mês que vem e o produto que vai crescer?".

Na prática, são perguntas que antecedem cada decisão:

  • Quem vai manter esse código em seis meses?
  • Um dev novo consegue entender o que esse módulo faz sem pedir ajuda?
  • A decisão de hoje cria ou reduz complexidade futura?
  • O padrão estabelecido aqui se aplica ao resto do sistema?

Responder a essas quatro perguntas dentro de uma tarefa comum já é fazer governança.

O primeiro contato e a integração de quem chega

O landing é o primeiro contato com o projeto, e ele define a impressão inicial. Quem abre o repositório encontra um caminho claro para o que precisa, ou desiste e vai perguntar para alguém.

Um bom landing é hierárquico, do geral para o específico, do conceito para a implementação.

README                → o que é, como rodar, onde encontrar o quê
docs/shared/          → princípios agnósticos de linguagem e plataforma
docs/<linguagem>/     → convenções específicas da stack
quick-reference.md    → consulta rápida para devs já integrados

O README é a porta de entrada. Alguém que nunca viu o projeto precisa conseguir três coisas em menos de 5 minutos: entender o que o projeto faz, rodar localmente e saber onde procurar o resto. Se qualquer uma delas exigir perguntar para um colega, o README está incompleto.

O onboarding eficiente transfere conhecimento estrutural. Um dev que entende como um módulo está organizado entende também os outros, porque todos seguem o mesmo padrão. É a consistência do projeto que permite ensinar uma vez e valer para o repositório inteiro.

Complexidade em camadas

A complexidade do sistema existe e não vai sumir. A governança decide como apresentá-la, na medida que cada leitor precisa.

A documentação em camadas serve esse propósito:

AudiênciaO que precisaOnde encontra
Não técnicoEntender o que o sistema faz e como se organizaREADME, docs conceituais
Dev iniciandoRodar, contribuir, entender convençõesREADME, quick-reference, exemplos
Dev experienteDetalhes de padrões e decisões de arquiteturadocs/shared, ADRs
EspecialistaRaciocínio que sustenta cada escolha técnicaADRs, comentários de decisão

A governança está funcionando quando cada uma dessas audiências abre o projeto e encontra o seu nível.

O nome é a governança de menor esforço

Um nome expressivo comunica a intenção sem exigir documentação em volta. Ele leva alguns segundos de reflexão na hora de escrever e poupa leitura toda vez que alguém passa por ali.

Um nome ruim dá trabalho de novo a cada leitura. Cada dev que encontra data, helper ou utils precisa abrir o arquivo e rastrear de onde a variável veio para saber o que ela guarda. Esse rastreio se repete com cada pessoa.

Um vocabulário consistente ajuda ainda mais. Quando a base inteira usa fetch para leitura, save para escrita e calculate para derivação, o leitor já sabe o que esperar de uma função que nunca viu.

Consistência ajuda a aprender

Padrões previsíveis deixam o leitor concentrado no domínio, em vez de decifrar o estilo de cada arquivo.

O efeito prático aparece no onboarding: quem entende a estrutura de um módulo entende todos os outros, e o aprendizado de uma área do sistema se transfere para as demais. O time cresce sem que o treinamento cresça junto.

A inconsistência produz o efeito oposto. Cada módulo com o seu jeito próprio obriga a um reaprendizado por área, e o conhecimento de quem já está no time deixa de transferir para quem chega.

ADR: registrar por que a decisão foi tomada

Os ADRs (Architecture Decision Records · Registros de Decisão de Arquitetura) guardam o raciocínio que levou à escolha. O código mostra o que foi feito; o ADR guarda o motivo, as alternativas que estavam na mesa e o que se abriu mão ao escolher.

Decisão sem registro vira conhecimento que só existe na cabeça de quem estava presente. Quando essas pessoas saem, o motivo sai junto. Quem chega depois questiona a decisão, refaz a mesma análise e às vezes reverte uma escolha que tinha um motivo legítimo e invisível.

Três elementos tornam um ADR útil:

ElementoConteúdo
ContextoO problema que existia e as restrições do momento
DecisãoO que foi escolhido e por quê
ConsequênciasO que fica melhor, o que fica pior, o que precisa de atenção

Normas de referência

Existe um conjunto de normas públicas que já resolveu problemas comuns de vocabulário, segurança, versionamento e troca de dados entre sistemas. Adotar essas normas encurta discussão de preferência pessoal. Uma auditoria externa também reconhece a norma sem precisar aprender a convenção da casa.

O agrupamento por domínio ajuda a localizar a norma certa no contexto certo.

Linguagem normativa e datas

NormaO que padroniza
RFC 2119 (Request for Comments · Pedido de Comentários)Vocabulário de obrigatoriedade: MUST, SHOULD, MAY. Usado em specs e ADRs para deixar o grau de exigência explícito
ISO 8601 (International Organization for Standardization · Organização Internacional de Normalização)Representação de datas e horários: 2026-04-23T14:30:00Z. Resolve ambiguidade entre formatos regionais

Protocolos HTTP (HyperText Transfer Protocol · Protocolo de Transferência de Hipertexto) e autenticação

NormaO que padroniza
RFC 7231 e RFC 9110Semântica do HTTP: métodos, status codes, cabeçalhos
RFC 6749OAuth 2.0 (Open Authorization · Autorização Aberta): fluxo de autorização delegada
RFC 7519JWT (JSON Web Token · token assinado que carrega a identidade do usuário): formato de token de claims assinado

Qualidade e segurança

NormaO que padroniza
ISO/IEC 25010Atributos de qualidade de software: manutenibilidade, confiabilidade, performance, segurança, usabilidade
ISO/IEC 27001Controles de segurança da informação no nível de organização
ISO/IEC 27035Resposta a incidentes: detecção, contenção, erradicação, pós-mortem
OWASP ASVS (Application Security Verification Standard · Padrão de Verificação de Segurança de Aplicação)Checklist de requisitos de segurança de aplicação com níveis de maturidade, mantido pela OWASP
OWASP Top 10Lista das dez classes de vulnerabilidade mais comuns em aplicações web

Versionamento e entrega

NormaO que padroniza
SemVer 2.0.0 (Semantic Versioning · Versionamento Semântico)Formato MAJOR.MINOR.PATCH com regras de incremento conforme o tipo de mudança
Conventional Commits (Commits Convencionais)Prefixos padronizados em mensagens de commit: feat:, fix:, docs:, chore:
Keep a ChangelogEstrutura do CHANGELOG.md: Added, Changed, Fixed, Removed, Deprecated, Security

A norma serve de ponto de referência. Um projeto pode divergir dela quando existe motivo concreto, e o desvio vale tanto quanto a conformidade desde que registrado em um ADR. O problema aparece quando a divergência acontece por inércia, sem decisão documentada: quem chega depois fica sem saber se aquilo foi uma escolha deliberada ou um acidente que ninguém corrigiu.

O code review é onde a governança encontra o código

Uma revisão que procura apenas bugs deixa passar a pergunta principal: este código se encaixa no sistema que já existe?

Perguntas que orientam uma revisão com pensamento de governança:

  • O nome dessa função faz sentido para quem nunca viu o contexto?
  • Esse padrão é consistente com o restante do módulo?
  • A documentação foi atualizada para essa mudança?
  • Quem vai manter isso em um ano vai entender sem contexto adicional?

Aprovar sem olhar essas perguntas devolve o PR ao autor em minutos, e o problema volta para o time meses depois, quando alguém precisa mexer naquele código.

Processo auditável

Um processo auditável permite conferir a qualidade em qualquer ponto do ciclo sem depender da memória de quem estava presente.

Cada etapa tem entrada, saída e um critério de verificação. Com isso em ordem, qualquer pessoa (dev, tech lead, alguém do negócio) olha um ponto isolado ou o ciclo inteiro e enxerga o estado real do projeto.

SpecImplementationReviewCIDeployObservability
EtapaO que ela entregaO que dá para conferir depois
Spec (especificação)O que vai ser feito, com critérios de aceite e a decisão anotadaOnde a decisão está escrita e quem a tomou
Implementation (implementação)Código e testesO histórico do git e o quanto os testes cobrem
Review (revisão de código)Comentários e aprovação no PR (Pull Request · pedido de mesclagem no código principal)Quem revisou cada mudança e o que foi apontado
CI (Continuous Integration · Integração Contínua)O build, o lint e os testes rodando sozinhos a cada envio de códigoSe cada commit passou ou falhou
Deploy (publicação)A versão que foi para o ar, com quem publicou, quando e ondeQual versão está rodando em cada ambiente
Observability (acompanhamento do sistema em produção)Logs, métricas e alertasO que o sistema está fazendo agora

A ordem e etapas podem variar conforme o tipo de projeto, escopo e divisão de equipes. O importante é ter clareza sobre cada etapa e garantir que todas sejam executadas.

No dia de uma falha em produção, cada etapa responde com o seu registro: qual decisão originou o problema, em qual review ele passou, qual teste não cobriu o caso, qual deploy o introduziu. O time reconstrói o que aconteceu a partir desses registros.

Checklists como ferramenta de qualidade

Com o processo alinhado, um checklist curto por etapa funciona como controle de qualidade. Cada um é leve, específico e aplicado no momento em que a etapa acontece.

O propósito é pegar o desvio antes que ele se espalhe. O item esquecido na Spec vira retrabalho na Review, e o item esquecido na Review vira bug em produção.

EtapaExemplos de verificação
SpecOs critérios de aceite estão definidos? A decisão ficou registrada em ADR ou no ticket?
ImplementationOs testes cobrem os caminhos críticos? Os nomes seguem as convenções?
ReviewO padrão combina com o resto do módulo? A documentação foi atualizada?
CIO build passa? O lint está limpo? A cobertura de testes ficou dentro do mínimo acordado?
DeployDá para identificar a versão? A volta atrás está mapeada? A feature flag (chave que liga e desliga a funcionalidade) está ativa se for o caso?
ObservabilityOs logs saem estruturados? O alerta está configurado? As métricas de referência ficaram registradas?

O checklist cobre o óbvio que se esquece sob pressão. O julgamento sobre o que o código deveria fazer continua com quem revisa.

Como saber se a governança está funcionando

O sinal aparece quando pessoas de contextos diferentes conseguem trabalhar no projeto com confiança.

O não técnico entende o que o sistema faz e como está organizado. O dev novo contribui em dias, sem precisar pedir contexto. O dev experiente localiza o que precisa sem perguntar. O especialista encontra o raciocínio que levou a cada decisão.

Se qualquer um deles abre o projeto e consegue seguir sozinho, a governança está fazendo o trabalho dela.

DoDocs v3.7.0 · Desenvolvido por @thiagocajadev · Baseado no trabalho de pmndrs/docs · Poimandres.