Executando verificação de segurança...
10

Pull Requests muito grandes atrasam o processo de desenvolvimento, revela estudo

Foram analisados 1,5 milhão de PRs e, sem surpresas, aqueles que modificam poucos arquivos sofrem o merge de forma mais rápida. Entretanto, mesmo um pequeno aumento no número de arquivos alterados aumenta exponencialmente o tempo de review, criando a possibilidade de conflitos e falhas nos processos de integração contínua (CI). Além disso, quanto mais complexo o PR, maior o risco associado, com revisores gastando menos tempo em cada arquivo analisado. A prática recomendada é limitar os PRs a três arquivos ou menos para manter a qualidade do código e eficiência no processo de revisão.

Carregando publicação patrocinada...
7

A verdade é que não existe bala de prata. Usar feature flag é um jeito de aliviar a pressão sobre o tamanho de um PR.

Isso porque quanto maior é a distância de uma branch da main/master, maior se torna o risco de conflito e quebrar o projeto.

Imagine que você possui um sistema de grids simples, com filtro de busca, ordenação etc que a vida inteira listou os registros de um sistema e agora surge uma branch de Feature Request que transformará agora a visão em uma árvore com sistema de pastas que permite agrupar recursivamente os registros.

Haverá tarefas bastante extensas tanto no frontend como backend, a depender da equipe serão vários sprints até implementar algo desse porte. A solução que eu utilizo é introduzir PRs pequenos que não quebram o master o mais rápido possível, por ex, haverá momentos aonde você terá uma rota validada que não possui UI que consome nada e vice versa.

Então quando as equipes terminam suas tarefas, mas a FEATURE (milestone) não é atingido uma "feature flag" que pode ser diretivas #ifdef e #ifndef (C/C++), ou uma constante que vem de um arquivo de configuração qualquer que LIGA/DESLIGA a feature.

Isso torna mais fácil, por exemplo, ter um ambiente staging aonde a equipe pode flagar o que quer testar, ligando e desligando as features, posteriormente quando todas as tarefas são fechadas e o milestone da feature é atingido, remove-se as feature flags do código e sobe pra produção.

Assim cada branch vira uma micro PR que derivou da issue de feature inicial ex:

  • [master]
    ^
  • [release] tagueia versao
    ^
  • [develop]
    ^
  • [feature]
    • [1204-feature-request-directory-system]
      • [1205-tree-view-ui-refactoring]
        • [1207-folder-thumbnail-generation]
        • [1208-recursive-search]
        • [1209-folder-drag-n-drop]
        • [1210-folder-move-dialog]
        • ...
      • [1206-api-for-directory-routes]
        • [1211-recursive-delete]
        • [1212-recursive-search]
        • [1213-move-file]
        • [1214-move-folder]
        • ...

Suponhamos que uma equipe de front e backend está trabalhando agora na "1204-feature-request-directory-system", seus PR serão derivados dessa branch e o mais rapido possível mergeados para branch develop, depois release e mesmo que incompleta o restante da feature, se ela não quebrar nos testes de integração, já faz merge pra master com a feature flag "1204-feature-request-directory-system" desligada.

Assim, a cada ciclo de sprint, as novas equipes que puxarem branch deveridas terão uma distância muito menor de alterações entre elas. No jeito "convencional" a master demoraria muito maias pra receber essas alterações porque a realease precisaria estar completamente finalizada no recebimento das features, bugfix etc e assim a cascata de PR sobe muito mais rápido pra produção.

E pra quem não quer trabalhar com as branchs intermediárias e trabalha em equipes também é igualmente benéfico. Eu acredito que o custo da organização é infinitamente menor que o da desorganização.

1

As vezes precisamos fazer diversas modificações para uma Feature/Pull Request funcionar. Só acho que deveriamos ter uma ferramenta pra poder fazer code review por commit. Temos como dividir a PR em partes, mas é bem manual.

1