System Design é o processo de planejar a arquitetura, os módulos, as interfaces e os dados que compõem um sistema. O objetivo é garantir que ele atenda aos requisitos funcionais e não funcionais definidos.
Antes de começar a programar, é fundamental entender o que será construído. Por isso, o processo de system design envolve algumas etapas importantes:
1. Coletar e entender os requisitos
Você precisa conversar com stakeholders, analisar o problema e entender as necessidades reais do sistema. Isso inclui funcionalidades esperadas, restrições técnicas e metas de negócio.
2. Pensar em como atender à demanda
Com os requisitos em mãos, você começa a pensar nas possíveis soluções. Que arquitetura faz mais sentido? Quais tecnologias usar? O sistema vai escalar bem? Essas decisões impactam diretamente no sucesso do projeto.
3. Alinhar expectativas
É essencial garantir que todos os envolvidos estejam na mesma página. Isso evita retrabalho e garante que o que está sendo construído resolve o problema certo.
Muitas vezes, o desenvolvedor também precisa atuar como um analista. Ou seja, além de programar, é seu papel buscar informações, propor soluções e validar ideias com o time e os clientes.
System design não é apenas sobre diagramas ou termos técnicos. É sobre traduzir a complexidade do mundo real em soluções digitais eficientes e escaláveis.
Como System Design é usado em entrevistas?
Entrevistas de System Design são comuns em processos seletivos para cargos de nível sênior ou superior. No entanto, algumas empresas também aplicam esse tipo de avaliação para candidatos de níveis júnior ou pleno, especialmente quando o cargo envolve decisões arquiteturais.
Qual é o objetivo dessa etapa?
O objetivo da entrevista de system design não é testar sua capacidade de codificar, mas sim avaliar:
- Como você pensa sobre escalabilidade e desempenho
- Quão bem você entende os requisitos do problema
- Sua habilidade de comunicar soluções técnicas com clareza
- Como você lida com trade-offs técnicos
- Sua capacidade de quebrar problemas complexos em partes menores
Como funciona na prática?
Na maioria das vezes, o entrevistador apresenta um problema amplo e aberto, pedindo que você proponha uma arquitetura de alto nível. Um exemplo comum seria:
Estamos construindo um aplicativo de delivery. Teremos uma página pública que exibe restaurantes próximos ao usuário. A plataforma contará com muitos restaurantes. Como você desenharia essa solução?
A partir daí, espera-se que você:
- Faça perguntas para esclarecer os requisitos (por exemplo: como é feita a geolocalização? haverá filtros por tipo de comida? qual o tráfego estimado?)
- Identifique os principais componentes do sistema (ex: frontend, API, banco de dados, sistema de cache, etc.)
- Descreva possíveis gargalos e soluções (como lidar com muitos acessos simultâneos, balanceamento de carga, paginar resultados, uso de CDN, etc.)
- Apresente um diagrama simples, se possível (muitas entrevistas são feitas com papel, quadro branco ou ferramentas como Miro)
- Fale sobre trade-offs. Ex: “Poderíamos usar Redis para cachear os restaurantes por região, mas isso exige uma política de expiração bem definida.”
A dica principal é: não tente acertar tudo de primeira. Dialogue com o entrevistador, valide suas ideias e mostre que você tem um bom raciocínio sistêmico.
Exemplos visuais de System Design
Se você quer explorar exemplos práticos, este repositório do GitHub é uma excelente referência:
👉 System Design Excalidraws
Nele, você encontrará diversos diagramas prontos para problemas clássicos de arquitetura de sistemas, todos criados no estilo visual do Excalidraw.
💬 Curtiu a ideia?
Se quiser, posso trazer aqui no blog uma versão desenhada da solução para o exemplo do app de delivery que mencionamos.
Deixe um comentário dizendo “quero ver o desenho” e eu preparo algo especial para você!