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

Tomei bronca por fazer MonoRepo

Fala galera! tudo certo?

Eu sou dev e sempre desenvolvi meus projetos web separando backend e frontend em dois repositórios diferentes, porque sempre foi algo que fez sentido pra mim.

Porém recentemente, conversando com alguns colegas descobri que essa recomendação é mais pra projetos grandes, com times separados, e pra criar um micro-SaaS próprio é ideal manter tudo em um repositório só (separando em duas pastas "frontend" e "backend")

Daí eu decidi adaptar um projeto meu para essa nova estrutura. Acontece que o outro dev que desenvolveu comigo não curtiu muito á alteração kkkkkk
(apesar de o projeto ser 100% meu e ele apenas fez algumas features e componentes)
Ele argumentou que fica feio e atrapalha demais na hora do deploy

Com isso eu fiquei bastante na dúvida, será que essa praticidade á mais compensa no longo prazo?

O que acham? Monorepo é melhor mesmo? ou é desorganização total?

pra acompanhar meus projetos me segue lá no x: twitter
e também no youtube, tô começando á postar bastante lá: meu canal

Carregando publicação patrocinada...
4

conversando com alguns colegas descobri que essa recomendação é mais pra projetos grandes, com times separados, e pra criar um micro-SaaS próprio é ideal manter tudo em um repositório só (separando em duas pastas "frontend" e "backend")

Eu não tomaria isso como regras universais, pra mim a melhor resposta é "Depende".

Já vi projetos pequenos em que as funcionalidades eram separadas. E projetos grandes com tudo junto (com as partes/módulos/chame-do-que-quiser cada uma em sua própria sub-pasta).

Separar pode deixar mais organizado, mas e quando tem muitas partes em comum? Compensa criar um terceiro componente/lib/módulo/pacote só com essa parte comum e adicionar como dependência em ambas? Ou é melhor deixar tudo junto?

É o caso de um projeto recente, que tem mais de 1600 arquivos e cerca de 240 mil linhas de código, somando front e back (portanto não diria que é "pequeno"). Ele é dividido em dezenas de módulos, e há muita dependência entre eles, além de dependências transitivas em comum - ou seja, as mesmas configurações ficariam duplicadas em mais de um módulo, caso fossem separados.

Neste caso, decidiram deixar tudo junto mesmo. O build já cuida de compilar e empacotar cada um junto com suas dependências, além de ter a possibilidade de se fazer o build individual, caso necessário.

Mesmo que hajam times separados, cada um mexe em um dos módulos por vez e não há tantos conflitos. Neste caso, é um problema de gerenciamento, de não deixar mais de uma equipe mexer nas mesmas coisas ao mesmo tempo. Pois se vc não faz esse gerenciamento, nada impede que diferentes equipes mexam nas mesmas coisas, independente de ter tudo junto ou separado.

Se não houvesse tanta interdependência, talvez tivessem optado por separar alguns módulos, ou talvez todos. Mas neste caso foi mais vantajoso manter tudo junto. Não atrapalha em nada o deploy, pois podemos escolher gerar o build de tudo ou apenas algumas partes, e cada pacote é gerado em sua respectiva pasta. Aí acho que tem mais a ver com as ferramentas usadas, a facilidade de configurar, etc (pra quem ficou curioso, usamos o Maven, que possui um bom suporte para projetos modulares).

Enfim, se alguém diz pra fazer (ou evitar) algo, seria bom dar uma justificativa técnica - algo melhor e mais elaborado do que "fica feio" ou "é boa prática". Tem casos que uma ou outra abordagem pode ficar melhor, e tem casos em que tanto faz.

4

Também estou criando meu próprio SaaS, comecei criando com repositórios separados, mas na hora de criar feature de verdade ainda mais nesse começo é bem mais rápido ter tudo em um único repositório

E a questão do deploy, eu sinceramente não vejo dificuldade de colocar um ./back-end e um ./front-end na hora de fazer deploy kkkkk

E se o SaaS ficar tão grande a ponto de precisar de um time maior e for fazer mais sentido separar os repos, acho que você vai encarar esse problema sorrindo já que provavelmente teu projeto já vai estar faturando muito bem nesse ponto kkkkkk

2

e pra criar um micro-SaaS próprio é ideal manter tudo em um repositório

é ideal segundo quem?

O repositório é seu vc faz o que quiser, quer criar um só, um pra cada serviço .... Você quem decide

Eu geralmente crio uma organização no github, separo cada serviço em seu repositório próprio

  • UI
  • API
  • DB
  • RabbitMQ
  • Redis
  • ....
1

Bom, na minha opinião, tudo depende do projeto, requisitos, equipe, se o projeto ta avançado ou não, entre outros fatores... monorepo, repos separados, vai depender do projeto.

Porem, tive uma experiencia onde tinhamos os repos todos separados e do nada o PO "decidiu" que iamos migrar pra monorepo. Como eu era o devops do projeto, enxerguei na hora o tamanho do problema que seria pra migrar, dado que alem de ser 3 repositórios enormes, eramos uma equipe de mais de 20 devs.. Tentei argumentar, mostrar pontos negativos, etc, porem não adiantou, o cara já tinha se decidido.. resumindo: foi horrivel, deu um puta trabalho adaptar todos os fluxos de ci/cd, testes, todos os clones dos devs, etc... inclusive tivemos problemas no git, conflitos de merge, repos muito grandes travando no merge, pr entre outros.

Bom, com isso eu digo minha opinião: para cada projeto uma opção pode ser melhor que outra e também tem a questão de gosto, porem, mudar a estrutura depois que o projeto ta avançado pode ser um belo desafio e as vezes não temos opção kkkk (eu particularmente prefiro repos separados btw)

1

sim, aqui levei em consideraçãop que o projeto é dele e não tem uma equipe trabalhando. Claro que em equipes maiores as coisas são mais complicadas

1