O que é Trunk-Based Development?
Em português: Desenvolvimento baseado na linha principal
Trunk-Based Development integra mudanças pequenas frequentemente a uma linha principal compartilhada.
Trunk-Based Development é uma estratégia de desenvolvimento em que mudanças pequenas são integradas frequentemente à linha principal de código. Pessoas podem trabalhar diretamente nela ou usar branches de curta duração. Testes, revisão e técnicas como feature flags ajudam a manter a linha utilizável enquanto funcionalidades evoluem. O objetivo é reduzir divergência e risco de integração tardia.
Origem
A prática foi sistematizada em materiais da comunidade Trunk Based Development e se relaciona à integração contínua. O nome descreve uma estratégia de ramificação, não uma ferramenta específica. Sua documentação admite branches curtas e destaca que mudanças devem retornar rapidamente à linha principal; uma branch longa compartilhada contraria o princípio.
Fonte primária: Trunk Based Development
Na prática
Trunk-Based Development é uma estratégia de trabalho com código em que pessoas integram mudanças pequenas e frequentes a uma linha principal compartilhada, geralmente chamada trunk ou main. Pode haver commits diretamente na linha principal ou branches de curta duração que voltam rapidamente para ela. A ideia é evitar que grandes mudanças cresçam isoladas por semanas, tornando integração um acontecimento rotineiro. Isso exige testes, revisão e práticas de entrega adequadas; não é simplesmente retirar proteção do repositório.
O que acontece quando falta
Mudanças grandes podem divergir e produzir conflitos difíceis, especialmente quando várias equipes alteram áreas próximas. Testes executados apenas em branches isoladas não verificam o conjunto final. Integrar cedo reduz o tamanho do problema de cada merge. Sua adoção depende de testes, compatibilidade e disciplina de revisão; apenas exigir frequência sem preparar essas condições pode aumentar incidentes.
Como funciona Trunk-Based Development
Trunk-Based Development é uma estratégia de trabalho com código em que pessoas integram mudanças pequenas e frequentes a uma linha principal compartilhada, geralmente chamada trunk ou main. Pode haver commits diretamente na linha principal ou branches de curta duração que voltam rapidamente para ela. A ideia é evitar que grandes mudanças cresçam isoladas por semanas, tornando integração um acontecimento rotineiro. Isso exige testes, revisão e práticas de entrega adequadas; não é simplesmente retirar proteção do repositório.
Divida mudanças. Uma funcionalidade grande precisa ser decomposta em passos integráveis. Refatorações preparatórias, novas interfaces compatíveis e pequenos comportamentos podem entrar separadamente. Cada passo deve manter a linha principal em estado utilizável conforme os critérios do time. Um pull request com milhares de linhas e várias semanas de trabalho dificulta revisão e cria conflitos, mesmo que receba o nome de branch curta no final.
Integre cedo. A documentação de Trunk-Based Development admite branches de feature curtas, com vida de poucos dias, além de desenvolvimento direto na trunk. O ponto não é abolir branches, mas reduzir divergência. Merges frequentes revelam incompatibilidades quando ainda são pequenas. Se um grupo mantém uma branch compartilhada por uma release inteira, passa a integrar apenas no fim e perde o principal benefício da abordagem.
Proteja a linha principal. Testes automatizados rápidos, análise estática, revisão proporcional ao risco e pipeline confiável ajudam a evitar código quebrado. Falha no build precisa ser tratada com prioridade. Um conjunto de testes lentos e instáveis pode levar as pessoas a ignorar sinais; trabalhe para torná-los confiáveis. Branch protection e aprovação podem coexistir com integração frequente se o tempo de espera não se torna gargalo.
Separe integração de exposição. Código integrado não precisa estar visível para todos os usuários. Feature flags, configuração ou caminhos novos não ativados podem esconder comportamento incompleto enquanto ele é desenvolvido em passos pequenos. A técnica exige cuidado: flags acumuladas criam complexidade e precisam de dono e plano de remoção. Uma flag também não protege de migração incompatível de dados ou de efeitos colaterais executados mesmo quando a interface está oculta.
Mantenha compatibilidade. Alterações em API e banco podem exigir estratégia expandir, migrar e contrair: adicionar opção compatível, mover consumidores e só então remover o formato antigo. Isso permite integrar pequenas mudanças sem desligar todo o sistema. Em arquitetura distribuída, verifique versões em operação simultânea. O trunk saudável depende de disciplina de evolução, não apenas da frequência de merges.
Reveja sem criar filas longas. Pull requests pequenos facilitam avaliação e conversa. Combine tempo de resposta, critérios de risco e automação. Se toda integração espera dias por uma aprovação formal, a equipe mantém mudanças locais e a divergência cresce. Revisão em par ou assíncrona rápida são opções, desde que a qualidade e o conhecimento compartilhado permaneçam. Não use rapidez como desculpa para dispensar responsabilidade.
Conecte à integração contínua. Continuous Integration envolve integrar frequentemente e verificar o conjunto. Trunk-Based Development fornece uma estratégia de ramificação alinhada a esse hábito. CI pode existir com branches, mas um pipeline verde em cada branch longa não descobre necessariamente conflitos entre elas. A medida importante é quanto tempo código fica isolado antes de entrar na linha comum.
Observe indicadores. Acompanhe idade de branches, tamanho de mudanças, tempo de review, frequência de integração, falhas de build e defeitos após merge. Mudanças pequenas podem revelar gargalo no teste ou em aprovação. Não transforme número de commits em produtividade. O objetivo é reduzir risco de integração e permitir entrega de valor mais frequente, mantendo segurança e qualidade.
Adapte a transição. Uma equipe acostumada a branches longas pode começar fatiando trabalho e reduzindo sua duração gradualmente. Melhore testes e estratégia de flags antes de exigir merges diários. Domínios com certificações ou hardware podem ter restrições diferentes, mas ainda podem buscar integração antecipada em ambiente apropriado. A prática deve resolver um problema de fluxo, não seguir uma regra cega de calendário.
Exemplo de nova busca por etapas
Exemplo hipotético: um time prepara uma nova busca. Antes, mantinha uma branch por seis semanas e descobria conflitos ao final. Agora, integra primeiro uma API compatível sem uso público, depois um índice de dados, depois uma interface protegida por flag. Cada mudança pequena passa por testes e revisão. A funcionalidade só é exposta a usuários quando critérios de qualidade e experiência são atendidos.
Durante a segunda semana, o pipeline detecta que uma alteração no índice afeta consultas antigas. A equipe corrige imediatamente, com pouco código a investigar. No modelo anterior, a incompatibilidade talvez só aparecesse perto da release. Após lançamento, remove a flag e caminhos antigos. Os prazos do exemplo são ilustrativos, não metas universais.
O time não abandonou revisão nem publicou código incompleto aos clientes. Diminuiu o período em que mudanças ficaram isoladas e separou integrar, liberar e expor a nova experiência.
Como começar a integrar cedo
Meça
Observe idade de branches e atrasos de merge.
Fatie
Divida funcionalidades em mudanças integráveis.
Proteja
Tenha testes, revisão e pipeline confiáveis.
Isole exposição
Use flags ou configuração quando necessário.
Integre
Faça merge frequente à linha principal.
Limpe
Remova flags e caminhos temporários após a entrega.
Trunk e branches longas
Uma branch longa adia integração e acumula diferenças que podem gerar conflitos e retrabalho. Trunk-Based Development traz mudanças pequenas para uma linha comum cedo, inclusive por branches curtas. Isso não determina automaticamente como ou quando publicar para clientes. Estratégias de release e exposição precisam ser planejadas separadamente, com qualidade e risco em mente.
Erros comuns
- Chamar branch longa de curta. Divergência continua crescendo.
- Integrar sem verificações. A linha principal perde confiabilidade.
- Acumular feature flags. A complexidade temporária vira permanente.
- Confundir merge com release. Exposição pode ser controlada separadamente.
- Medir commits por pessoa. Frequência não equivale a valor.
Para se aprofundar
Fontes primárias
- Trunk Based Development, Trunk Based Development
- Short-Lived Feature Branches, Trunk Based Development
Termos relacionados
Perguntas frequentes
O que é Trunk-Based Development?
É trabalhar com uma linha principal compartilhada e integrar nela mudanças pequenas frequentemente. Pode-se desenvolver diretamente na trunk ou usar branches de curta duração. A prática reduz divergência e descoberta tardia de conflitos. Requer verificações e revisão adequadas para que a linha comum permaneça confiável.
É proibido usar branches?
Não. A documentação da prática admite branches curtas que retornam rapidamente à linha principal. O problema são branches longas em que muitas mudanças se acumulam sem integração. Uma pull request pequena com revisão rápida pode se alinhar à abordagem. O tempo isolado e o tamanho da mudança importam mais que o simples uso de branch.
Como integrar uma funcionalidade incompleta?
Divida o trabalho em partes compatíveis e mantenha o comportamento incompleto sem exposição pública, quando necessário, por flag ou configuração. A linha principal deve continuar utilizável. Flags precisam de critérios de ativação e remoção. Também é preciso cuidar de migrações de dados e efeitos colaterais que uma flag visual não controla.
Qual é a relação com Continuous Integration?
Integração contínua é o hábito de combinar mudanças frequentemente e verificar o conjunto. Trunk-Based Development oferece uma estratégia de branches que favorece esse hábito. Um pipeline verde em cada branch longa não garante que elas funcionem juntas. O fluxo melhora quando código volta à linha compartilhada cedo e falhas são corrigidas rapidamente.
Trunk-Based Development exige deploy contínuo?
Não. Integrar código, disponibilizar uma versão e expor uma funcionalidade são decisões diferentes. Uma equipe pode integrar frequentemente e publicar em outra cadência por razões técnicas ou regulatórias. O desafio é manter a linha principal verificável e evitar que o intervalo entre integração e entrega acumule mudanças difíceis de avaliar.
Sua próxima formação
Descubra qual curso é certo para você
Veja a trilha completa de carreira em agilidade, Scrum e Kanban da K21.
