System Design/01 - Fundamentos2 min
What is System Design
- Que problema isso resolve?
- Quando usar / quando NÃO usar?
- Qual o principal trade-off?
- Como isso falha em produção?
Conceito
System design é decidir como as partes de um sistema se encaixam para atender requisitos de escala, disponibilidade e custo — antes de escrever código.
A diferença para "programar bem" é o nível: você não está escolhendo estrutura de dados dentro de uma função, está escolhendo onde o estado mora, quem fala com quem e o que acontece quando um pedaço morre.
Um design é descrito por:
| Dimensão | Pergunta |
|---|---|
| Requisitos funcionais | O que o sistema faz? |
| Requisitos não-funcionais | Quantos usuários, que latência, que disponibilidade? |
| Restrições | Orçamento, time, prazo, regulação |
| Componentes | Serviços, bancos, filas, caches |
| Fluxo de dados | Como a informação atravessa o sistema |
| Modos de falha | O que quebra e como o sistema reage |
O que torna o assunto difícil não é conhecer os componentes — é que toda escolha tem custo em outro lugar. Não existe design "certo", existe design adequado a um conjunto de restrições explícitas.
Trade-offs
O trade-off central de system design é complexidade contra capacidade. Cada componente adicionado (cache, fila, réplica) resolve um problema e cria outros: mais um ponto de falha, mais um estado para sincronizar, mais uma coisa para operar às 3 da manhã.
Isso leva à regra que quase todo engenheiro sênior repete: comece simples. Um monolito com um banco resolve mais casos do que a literatura sugere. A complexidade deve ser puxada por um requisito medido, não empurrada por antecipação.
O segundo trade-off é generalidade contra otimização. Um sistema que serve bem a qualquer padrão de acesso serve mediocremente a todos; conhecer o padrão real permite decisões muito melhores — e amarra você a ele.
Exemplo prático
O mesmo requisito — "encurtador de URL" — produz designs radicalmente diferentes conforme a escala:
| Escala | Design adequado |
|---|---|
| 100 links/dia | Um servidor, SQLite, sem cache |
| 10 mil/dia | App + Postgres + índice na chave curta |
| 10 milhões/dia | Cache na frente, banco chave-valor, geração de ID sem coordenação |
| 1 bilhão/dia | Multi-região, CDN, particionamento, consistência eventual |
Ir direto para o quarto quando o requisito é o primeiro é o erro mais caro da área. E o inverso — descobrir o requisito do quarto rodando o primeiro — é o mais visível.
Relacionado
Parte de Introduction · roadmap.sh/system-design