PRs empilhados viraram mainstream no GitHub. Aqui está seu plano de rollout.

Por Diogo Hudson Dias
Senior engineer in a São Paulo office reviewing a sequence of small pull requests on a large screen with teammates.

Você não tem um problema de velocidade. Você tem um problema de lotes. O GitHub acabou de remover sua última desculpa: pull requests empilhados (PRs empilhados) agora são um fluxo de trabalho de primeira classe. Se seu time ainda move trabalho em mega‑PRs de 1.500 linhas “por causa do contexto”, você está pagando um imposto oculto em latência de revisão, conflitos de merge e reversões na noite de sexta. PRs empilhados são como Meta, Google e equipes ao estilo Graphite entregam com segurança e rapidez há anos. Agora você também pode — sem sair do GitHub.

O que os “PRs empilhados” realmente mudam

PRs empilhados permitem aterrar uma sequência de mudanças pequenas e dependentes como unidades individualmente revisáveis que fazem merge em ordem. Cada PR é baseado no anterior, então você pode entregar uma feature em cinco passos de 150 linhas em vez de um salto cego de 750 linhas. Revisores veem diffs limpos; a CI valida cada passo; reverts são cirúrgicos. Isso não é novidade. É um mecanismo que força a disciplina para eliminar batching e reduzir a taxa de falha de mudanças mantendo a vazão alta.

Por que agora? Porque o GitHub removeu as gambiarras. Você não precisa mais de scripts sob medida ou ferramentas de terceiros para gerenciar branches dependentes, reapontar a base e fazer merge em ordem. Com PRs empilhados nativos mais merge queue, você tem histórico linear, rebase automático e checks por PR sem heroísmo.

Quando PRs empilhados ajudam (e quando não ajudam)

  • Eles ajudam quando você tem um monorepo, alto acoplamento ou mudanças transversais frequentes (atualizações de framework, migrações de API, refactors de UI). Espere 25–40% de redução no tempo mediano até merge e menos “resets de revisão” causados por conflitos inesperados.
  • Eles ajudam quando a codificação assistida por IA infla o volume de mudanças. LLMs adoram tocar cinco arquivos para um “ajuste simples”. Empilhar permite isolar o churn de ferramentas das mudanças de comportamento.
  • Eles não ajudam se seus custos de CI sobem linearmente com a contagem de PRs e você não tem invalidação do grafo de build. Se cada PR dispara um rebuild de monorepo de duas horas, você vai derreter a fila.
  • Eles não ajudam para mudanças triviais ou edições de um único arquivo. Não adicione cerimônia a uma one‑liner.

Regra prática: se uma mudança seria razoavelmente revisada em duas sessões focadas, divida. Mire 100–300 LOC por PR com um tópico por diff. Acima de 400 LOC, seu p95 de tempo de revisão infla e os benefícios se dissipam.

Um plano de rollout de 30 dias para CTOs

Semana 1: Defina as restrições

  1. Escolha um time piloto com 5–10 engenheiros trabalhando em uma área de alto churn do monorepo. Evite o time de infra que mantém arquivos globais de build no primeiro mês.
  2. Escolha sua política de histórico: rebase/merge queue + histórico linear. Ative a merge queue do GitHub para o branch padrão e exija status checks. Isso dá ordenação determinística e menos incidentes de “trunk contaminado”.
  3. Defina o limite do stack: limite stacks a 3–5 PRs. Acima de 7, revisores perdem contexto e você recria batching pela porta dos fundos.
  4. Defina SLAs de revisão: 24 horas úteis para a primeira resposta; 48 horas para aprovação quando estiver verde. Publique isso como você publica as escalas de on‑call.
  5. Instrumente métricas de linha de base: tamanho mediano de PR (LOC), tempo até a primeira revisão, tempo até merge, taxa de falha de mudança (hotfixes em até 72 horas após o merge) e retrabalho induzido por conflitos. Se você não mede isso hoje, não saberá se empilhar compensa.

Semana 2: Coloque guardrails no código, não no Confluence

  1. Nome de branch: imponha um padrão como user/feature‑id/stack‑01, stack‑02 etc. Sua CI pode usar isso para visualizar e controlar stacks.
  2. Disciplina de commit: cada PR empilhado deve ter uma frase de propósito única na descrição: “Stack 2/4: extrair camada de validação; sem mudança de comportamento.” Inclua um checklist explícito para o revisor (tests, migrations, flags). Disciplina vence “vibes”.
  3. CODEOWNERS na granularidade certa: distribua a carga de revisão. Em um monorepo, muitos stacks morrem no altar de “a única pessoa que pode aprovar /core/”. Quebre a propriedade por diretório ou superfície de linguagem sempre que possível.
  4. CI ciente de stack: rode checks rápidos em todo PR do stack (lint, unit tests, type checks) e reserve suites e2e completas para o topo do stack ou para o gate da merge queue. Adicione um job “revalidate top” que roda automaticamente quando qualquer PR inferior muda.
  5. Atualize bases automaticamente: habilite reapontamento automático da base e rebase no merge no GitHub. Humanos não devem tocar nisso. O stack deve “ondular” para frente sem pushes manuais.

Semana 3: Pilote pra valer

  1. Escolha uma feature real com valor visível e edições transversais conhecidas (por exemplo, trocar uma biblioteca de logging, adicionar eventos de auditoria ou erguer uma fronteira de serviço).
  2. Desenhe o stack antes de codar. Cinco cartas em um board: 1) extração pura, 2) adapters e shims, 3) caminho de escrita da migração atrás de uma flag, 4) inverter o caminho de leitura atrás de uma flag, 5) remoção de código morto e limpeza. Entregue cada um como seu próprio PR.
  3. Use feature flags e proteções de migração: toda mudança de comportamento pousa desligada. Cada PR deve ser seguro para fazer merge e reverter de forma independente.
  4. Ative auto‑merge para PRs verdes para não ficar “acampando” em botões. Deixe a merge queue serializar os merges.
  5. Imponha um plano de revert: pratique um exercício de “revert range”. Se o PR 3 falhar pós‑merge, reverta apenas o 3. Se o rollback exigir desfazer 1–3, seus limites de stack estão errados.

Semana 4: Meça e expanda

  1. Compare métricas: mire 25–40% mais rápido no tempo mediano até merge, diffs 30–50% menores e queda pela metade no retrabalho causado por conflitos. O gasto de CI pode subir 10–25% a menos que você tenha ajustado a invalidação de build.
  2. Codifique as regras em um guia curto: 1–2 frases de tópico por PR, 100–300 LOC, tudo sob flag, limite de stack em 5. Inclua uma seção “quando não empilhar”.
  3. Faça rollout para times adjacentes, mas condicione à saúde da CI. Se o tempo de espera na merge queue > 30 minutos no pico ou flakes em e2e > 2% na fila, corrija a infra antes de adicionar mais stacks.

Realidade de monorepo: não derreta a CI

A maneira mais rápida de azedar um rollout de PRs empilhados é explodir seus pipelines. Um monorepo que reconstrói o mundo por PR transforma diffs pequenos em contas grandes. Resolva isso primeiro:

  • Invalidação do grafo de build: adote um sistema de build que entenda targets e dependências (Bazel, Buck2, Gradle com cache remoto, Turborepo). Se um PR apenas de UI dispara uma suite e2e de backend, você está queimando dinheiro.
  • Cache agressivo: habilite cache remoto e reutilização de GitHub Actions cache entre branches do mesmo stack. Stacks compartilham a maioria dos artefatos.
  • Divida os checks: checks rápidos (menos de 5 minutos) em todo PR do stack; suites lentas apenas no topo e no gate da merge queue. Só isso reduz minutos de CI em 20–30% em dados de pilotos que vimos.
  • Integração pré‑merge: use a merge queue do GitHub como sua fonte da verdade. Faça rebase de cada PR no head da fila, rode os gates completos uma vez e então faça o merge em ordem. Esse é o seu “teste de integração”, não cada PR.

Ergonomia de revisão: poupe seu time

PRs empilhados podem queimar revisores se você for descuidado. Ferramentas importam, mas hábitos importam mais.

  • Delimite o stack: nada de stacks de “scroll infinito”. Se descobrir novo escopo, pouse o stack atual e abra uma nova sequência. Não mantenha uma cadeia refém das descobertas da segunda semana.
  • Uma única preocupação por PR: “rename + mudança de lógica” são dois PRs. Namespaces, imports, renomes vêm primeiro. Comportamento vem depois. Seu eu do futuro vai agradecer durante um revert.
  • Higiene de diff: adicione tags de “sem mudança de comportamento” a PRs apenas de refactor e imponha isso. Bloqueie qualquer mudança de teste que esconda lógica.
  • Atribua revisores por camada: olhos especializados para refactors vs. mudanças de comportamento. O PR de migração de dados vai para os donos de DB. O PR de adapter vai para plataforma. Não pulverize pedidos por cinco pessoas em toda camada.
  • Orçamentos de revisão: 45 minutos por dia em revisões, no máximo. Se um stack excede o orçamento, ele está grande demais ou mal modelado. Proteja o foco.

Alterações de esquema e outras coisas difíceis

PRs empilhados brilham em migrações se você respeitar ordem e segurança.

  • Expandir–Migrar–Contrair: PR1 adiciona novas colunas que aceitam nulo + dupla escrita atrás de uma flag; PR2 faz backfill com jobs idempotentes; PR3 inverte leituras; PR4 remove colunas antigas. Cada PR é seguro e revertível de forma independente.
  • Gates de runtime: entregue migrações com kill‑switches (feature flags, toggles de ambiente). Se seu plano de rollback é “restaurar do backup”, você não tem um plano.
  • Shims de acesso a dados: adicione adapters de leitura/gravação nos PRs iniciais para que PRs posteriores possam mudar a persistência sem tocar nos call sites. Isso reduz raio de impacto e escopo de revisão.
  • Arestas entre repositórios: se seus contratos cruzam repositórios, congele interfaces via clientes versionados. Pouse primeiro os stacks do servidor, depois os stacks do cliente atrás de toggles. Não intercale PRs de servidor/cliente em uma única cadeia de dependência entre repositórios.

Times com IA: contenha o churn

IA acelera digitação, não integração. PRs empilhados são seu governador.

  • Exija um “Spec PR” na base de qualquer mudança com múltiplos arquivos feita por IA: apenas tests, tipos e esboços de interface; nenhum comportamento. Depois deixe a IA preencher implementações nas camadas superiores. Revisores podem aprovar o contrato uma vez.
  • Linting de diff: bloqueie PRs que excedem limites de LOC a menos que marcados como “migration”. A IA adora exagerar; imponha disciplina automaticamente.
  • Assinaturas das ferramentas: rode diffs de análise estática (SARIF) em cada camada de PR. Alguns modelos quantizados degradam a confiabilidade de chamadas de ferramenta; estratifique mudanças pequenas para tornar falhas óbvias.

Governança e risco

Empilhar não é passe livre. Trate como qualquer mudança de processo: defina controles e então meça.

  • Scans de segurança por camada: code scanning deve rodar em cada PR, mesmo em refactors. Você vai capturar mudanças “inofensivas” mecânicas que ampliam a superfície de ataque sem querer.
  • Fronteiras de propriedade: exija aprovações explícitas quando um PR cruza uma fronteira de alto risco (auth, billing, PII). Não deixe um refactor de baixo risco derivar para código sensível.
  • Segurança de deploy: vincule feature flags a pessoas permissionadas para alternar. Se qualquer um pode ligar uma stack meia‑pousada em produção, você recriou “merge grande, reze” com runbooks.
  • Resposta a incidentes: adote a política de “reverter primeiro” e celebre as reversões. Um revert limpo no PR 3/5 é sucesso, não fracasso. Recompense velocidade e clareza.

Números que você pode defender para o seu CFO

Espere trade‑offs, mas a matemática tende a fechar:

  • Vazão: times que saem de PRs de 800–1.200 LOC para diffs empilhados de 150–300 LOC tipicamente veem o tempo mediano até merge cair 25–40% em duas sprints. Revisores decidem mais rápido com menos troca de contexto.
  • Retrabalho: retrabalho causado por conflitos cai 40–60% porque a ordem de merge é determinística e os rebases são automáticos. Isso também reduz “plantões” de fim de semana.
  • Gasto de CI: a menos que você implemente invalidação de build, minutos de CI podem subir 10–25%. Com builds por alvo e reutilização de cache, já vimos ficar neutro ou até –10% em pilotos, porque flakiness e retries caíram.
  • Taxa de falha de mudança: diffs pequenos mais flags reduzem incidentes pós‑merge em 15–30%. Reverts ficam mais baratos e menos políticos; as pessoas puxam a cordinha mais cedo.

Nada disso requer fé. Instrua métricas DORA e um contador de conflitos. Se seu stack não mover essas métricas, pare e corrija o controle de escopo ou a CI, depois tente de novo.

Modos comuns de falha (e como evitá‑los)

  • A escada infinita: stacks que nunca pousam porque as camadas inferiores continuam mudando. Corrija limitando a altura do stack e fazendo merge de sequências concluídas semanalmente, mesmo se a feature não estiver “pronta”. Flags existem por um motivo.
  • Avalanches de revisão: toda camada aciona as mesmas três pessoas. Corrija com amplitude em CODEOWNERS e uma rotação. Atribua camadas de refactor a aprovadores diferentes das camadas de comportamento.
  • Acoplamento oculto: mudanças de comportamento se infiltram em PRs de refactor. Corrija com checklists e checks de CI que proíbam mudanças de teste em PRs de “sem mudança de comportamento”.
  • Deadlocks de CI: rodar e2e completo em toda camada bloqueia a fila. Corrija executando suites pesadas apenas no topo do stack e na integração da merge queue.
  • Dívida de flags: você pousa cinco stacks e esquece de limpar flags. Corrija com um SLA: remova flags obsoletas em até duas releases e alerte sobre toggles mortos.

Detalhes de implementação que valem a pena acertar

  • Auto‑merge + fila: exija checks verdes e histórico linear, depois deixe a fila fazer merge dos stacks em ordem. Humanos não devem “tomar conta” de botões.
  • Branch “zona de pouso” protegido: alguns times usam um branch temporário como base do stack e então fazem rebase do stack inteiro em main pouco antes de enfileirar. Isso isola o churn durante o desenvolvimento ativo.
  • Modelos de descrição de PR: forneça um bloco de copiar‑colar com “Escopo, Comportamento, Tests, Flags, Risco, Plano de Revert”. Reduza bikeshedding e contexto perdido.
  • Visualização: use labels como “stack:1/4” e linke a cadeia no topo de cada PR. Revisores devem enxergar a ordem de relance.
  • Documentação e treinamento: faça uma demo ao vivo de 30 minutos de um stack real. Documentos escritos não mudam hábitos; ver uma feature de 5 PRs pousar em um dia muda.

Por que isso importa agora

Duas tendências colidem em 2026: volume de mudanças amplificado por IA e expectativas de confiabilidade mais apertadas. Seu board quer features mais rápido. Seus clientes não toleram quebras. PRs empilhados são como você move ambas as curvas na direção certa: deltas menores e mais seguros que integram continuamente sem forçar seu time a escolher entre velocidade e controle.

O GitHub lançar PRs empilhados remove a desculpa de plataforma. Agora é uma decisão de processo — não uma restrição de ferramentas. Se sua organização padroniza “big bang” porque “sempre foi assim”, você está deixando vazão na mesa e convidando surpresas às sextas.

Adote PRs empilhados sem drama

Comece com um time, uma feature, quatro semanas. Limite stacks, coloque tudo sob flags, ajuste a CI e meça sem dó. Se suas métricas não se moverem, ajuste os limites até se moverem. Quando se moverem, escale horizontalmente — mas só na velocidade em que sua merge queue e seus revisores conseguem acompanhar.

Principais pontos

  • PRs empilhados transformam mega‑diffs arriscados em passos seguros e revisáveis e agora são nativos no GitHub.
  • Faça um piloto com limite de 3–5 PRs por stack, 100–300 LOC por PR e SLAs de revisores de 24/48 horas.
  • Use merge queues, histórico linear e CI ciente de stack para não derreter seus pipelines.
  • Rode checks rápidos em toda camada; reserve suites pesadas para o topo do stack e para a fila.
  • Flags e exercícios de revert tornam cada PR independentemente seguro para pousar ou desfazer.
  • Espere 25–40% mais rápido no tempo até merge e menos “fire drills” causados por conflitos; o gasto de CI pode subir sem invalidação de build.
  • Evite modos de falha: stacks infinitos, avalanches de revisão, mudanças de comportamento escondidas e dívida de flags.
  • Meça métricas DORA e retrabalho por conflito; se não melhorarem, corrija controle de escopo ou CI antes de escalar.

Author: Diogo Hudson Dias

Ready to scale your engineering team?

Tell us about your project and we'll get back to you within 24 hours.

Start a conversation