Monorepo: Uma Armadilha Disfarçada de Praticidade (Anti-pattern)
Tags: monorepo, javascript, webdev, programming
Published: 2023-11-24 11:01:44

## Introdução:

Nos últimos anos, o conceito de monorepositório, ou monorepo, tem sido propagado como uma solução para todos os males do desenvolvimento de software. No entanto, neste artigo, desafiaremos essa narrativa, expondo as armadilhas e desvantagens associadas ao uso do monorepo em contextos onde ele muitas vezes se revela mais um problema do que uma solução.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oyorph3tvoqkoe0r2oyr.png)
*Figura 1: O "Monorepo" como uma solução única.*

**Estrutura monorepo:**

```md
monorepo/
|-- api/
|   |-- index.js
|   |-- package.json
|
|-- frontend/
|   |-- index.html
|   |-- main.js
|   |-- package.json
|
|-- package.json

```

A estrutura gera uma falsa sensação de organização porem isso se torna um pesadelo pois você tem tudo em um só lugar onde os commits, as branchs , os conflitos estão tudo em um só lugar.

## Desvantagens do Monorepo:

**Escala Descontrolada:**

À medida que um projeto cresce, o monorepo pode se transformar em uma fera incontrolável. O aumento de escala frequentemente resulta em tempos de compilação e testes mais longos, prejudicando a eficiência do processo de desenvolvimento.

**Complexidade Crescente:**

A ideia de centralizar tudo em um único repositório pode parecer atraente, mas a complexidade associada a isso pode rapidamente se tornar esmagadora. Manter uma visão clara e concisa do código em um monorepo pode ser uma tarefa hercúlea.

**Dificuldades na Adoção Gradual:**

Migrar para um monorepo é uma tarefa complexa, especialmente para projetos já existentes. A transição abrupta pode levar a períodos de instabilidade e desorientação na equipe.

**Controle de Acesso Complicado:**

Garantir que as equipes certas tenham acesso às áreas apropriadas do código pode se tornar uma dor de cabeça. O controle de acesso e permissões no contexto de um monorepo pode se tornar um desafio, especialmente em organizações maiores.

**Dificuldades no Processo de Deploy:**

Com o monorepo, torna-se muito desafiador a construção de pipelines, visto que o projeto ganha uma complexidade enorme com vários projetos em um só lugar.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x035lckznkl9l9pta16s.png)
*Figura 2: Desafios no processo de Deploy.*

**Dificuldades na Estratégia de Branchs:**

Com o monorepo, a estratégia de branches se torna muito complicada devido ao grande volume de alterações dentro do repositório.

![Messy](https://media.giphy.com/media/OQrx03s8VwOl7XmfiZ/giphy.gif)

## 🏆 Conclusão:

Em um mundo onde o monorepo é frequentemente apresentado como uma bola de prata para os desafios do desenvolvimento de software, é crucial questionar se essa abordagem é sempre a melhor escolha. Projetos menores, equipes reduzidas e contextos onde as fronteiras entre componentes são claras muitas vezes se beneficiam mais de alternativas mais flexíveis. Ao considerar a implementação de um monorepo, é fundamental pesar os benefícios em relação às possíveis armadilhas e avaliar se essa abordagem se alinha verdadeiramente com as necessidades específicas do projeto em questão.

🚨 **Cuidado com o Monorepo! Avalie suas necessidades antes de se comprometer.** 🚨