A cada seis meses alguém no Twitter reacende a guerra monorepo versus polyrepo e eu perco mais um ano de vida assistindo. Já cansei de briga por uma resposta universal que não existe.
"Monorepo é o futuro! O Google usa!" O Google também construiu seus sistemas de controle de versão e build, e emprega milhares de engenheiros de infra pra sustentar isso. Tu tem sete devs e uma org no GitHub. Senta aí, por favor.
"Polyrepo dá independência de verdade!" Aproveita pra manter 47 pipelines de CI separados, coordenar releases em 12 repos e gastar metade da sprint debugando incompatibilidade de versão entre pacotes que precisavam ser atualizados juntos. Boa sorte.
A escolha depende do time, por mais chata que seja essa resposta. Pra time pequeno, com serviço acoplado e biblioteca compartilhada, eu iria de monorepo. Turborepo melhorou muito o tooling. Migrei três projetos pra ele ano passado e o build caiu 60% com o cache. Ele cuida do grafo de dependência e do build incremental, além do cache remoto.
Polyrepo faz sentido com time grande, serviços independentes e cadências de deploy diferentes. Cada time pode ser dono do repo, do CI e do deploy.
Acho que a maioria escolhe polyrepo pra evitar investir em tooling de monorepo. E a maioria escolhe monorepo porque viu uma palestra em conferência. Nenhuma dessas razões presta.
O tooling pesa nessa decisão. Lerna tá morto; se tu ainda usa, meus pêsames de coração. Nx é poderoso, mas complexo. Turborepo acerta o sweet spot pra maioria dos times. Escolhe pelas tuas necessidades, sem terceirizar isso pra influencer.
E, pelo amor de tudo que é sagrado, para de comparar teu setup com FAANG. Tu já tem teus próprios problemas pra resolver.