Framework de system design, capacity estimation, trade-offs de escalabilidade e disponibilidade, design de sistemas clássicos (URL shortener, Twitter timeline, Uber matching, notificações em escala, search), internals de bancos distribuídos, CDN e cache distribuído, consistência eventual avançada, e como apresentar decisões técnicas sob pressão de entrevista. O módulo capstone que integra os 13 módulos anteriores em problemas de design de sistemas reais.
Doze conceitos que fecham a formação com o problema mais comum em entrevistas de engenheiro sênior: design de sistemas reais sob restrições de escala. Cada conceito usa um sistema concreto como veículo — URL shortener, Twitter, Uber, Kafka, Elasticsearch — porque é neles que os trade-offs ficam visíveis. O framework e a vocabulary aprendidos aqui traduzem os 13 módulos anteriores em linguagem de design de sistemas: SLO vira latência P99; circuit breaker vira estratégia de disponibilidade; kafka vira choice arquitetural justificada.
Os seis passos de uma sessão de system design: clarificar requisitos (funcionais e não-funcionais), estimar escala, definir API, desenhar arquitetura de alto nível, aprofundar componentes críticos, discutir trade-offs e limitações. O que entrevistadores avaliam: clareza de pensamento, articulação de trade-offs, priorização, e comportamento sob ambiguidade. Erros comuns: mergulhar em implementação sem clarificar requisitos; otimizar prematuramente; não justificar escolhas.
O papel de estimation não é precisão — é ordem de magnitude que direciona arquitetura. Os números de referência que todo engenheiro sênior deve ter internalizados: latências de I/O (RAM vs SSD vs HDD vs rede), throughput de banco de dados (leitura vs escrita), tamanho médio de objetos, capacidade de um único servidor. Derivar: QPS de read e write, storage em 5 anos, banda de rede. Por que estimation muda o design: 1k req/s vs 1M req/s tem soluções radicalmente diferentes.
Design de um URL shortener (bit.ly, tinyurl) que processa 100M redirects/dia. Requisitos: criar URL curta, redirecionar para original, expiração opcional, analytics básico. Componentes: geração de ID curto (base62, hash, contador sequencial distribuído), storage (SQL vs NoSQL, TTL via Redis), cache para redirects (99% de leituras), CDN edge para latência global, particionamento de analytics. Trade-off central: consistência de analytics vs latência de redirect.
O problema de timeline expõe o trade-off entre fan-out on write (pre-computar a timeline de cada usuário quando um tweet é criado) e fan-out on read (montar a timeline no momento da leitura). Leituras são 100x mais frequentes que escritas: fan-out on write favorece leitura mas explode em storage e latência de escrita para usuários com 1M+ seguidores (o "celebrity problem"). A solução híbrida do Twitter real: fan-out on write para usuários comuns, fan-out on read para celebridades, merge na borda.
Design do sistema de matching motorista-passageiro (Uber, Lyft). Requisitos críticos: latência de matching <5s, atualização de localização de motoristas em tempo real (cada carro envia GPS a cada 4s), escala global. Componentes: Location Service com geohash para indexação espacial e busca por proximidade, Matching Service com algoritmo de pontuação (distância, rating, tipo de carro), Trip Service para gerenciar estado da corrida, Websocket para notificações em tempo real. O problema de consistência: dois passageiros podem ver o mesmo motorista disponível simultaneamente.