System Design
Como estou aprendendo system design
A maior parte do conteúdo de system design assume que você já rodou algo em produção. Construir o que os vídeos explicam, em vez de só assistir, fecha essa lacuna mais rápido do que esperar a experiência chegar.
Conteúdo de system design está em todo lugar agora, e a maior parte assume que você já rodou algo em produção e viu quebrar. Essa experiência é genuinamente útil. Também não é a única forma de entrar, e esperar tê-la antes de tocar no assunto significaria nunca começar.
Então eu construo os sistemas que os vídeos explicam, em vez de só assistir a eles.
Só assistir não ensina system design
Eu consigo assistir um vídeo explicando load balancers, caching, e escolhas de database, e concordar com a cabeça o tempo todo. Isso não é a mesma coisa que entender por que uma escolha específica importa para um problema específico.
O URL shortener sobre o qual escrevi veio direto disso. Um vídeo de system design percorreu a arquitetura, e em vez de só assistir, eu construí a coisa: três cópias da aplicação atrás de um load balancer, um database escolhido para o padrão de acesso, um cache adicionado sem tocar no resto do código.
O que construir me ensinou que assistir não ensinou
Assistindo o vídeo, "adicionar um cache" soa como um passo óbvio só. Construindo, eu tive que decidir onde o cache morava no código, o que acontecia num miss, e por quanto tempo uma entrada deveria sobreviver antes de ficar stale.
Nenhuma dessas decisões está no diagrama. Elas só aparecem quando você escreve o código e esbarra nas perguntas que o diagrama pulou, e errar uma vez ensina mais do que ouvir a explicação dez vezes.
Sistemas pequenos têm os mesmos formatos
A outra coisa que eu sempre noto: os problemas não precisam de escala de produção para serem reais. Dois requests batendo na mesma linha é um problema de concorrência quer o sistema tenha dez usuários ou dez milhões. Uma query lenta é lenta em qualquer tamanho. Decidir que um cache e um database podem discordar é a mesma decisão de qualquer jeito.
Escala muda o quanto um erro custa caro. Não muda o formato do erro, que é a parte que vale a pena aprender primeiro.
Onde eu estou com isso
Não estou tentando aprender todo pattern de uma vez. Cada projeto pega um ou dois conceitos novos, load balancing e caching dessa vez, e deixa o resto para o que quer que eu construa a seguir.
Isso é mais devagar do que percorrer um curso inteiro de uma vez, e é a única abordagem que encontrei onde os conceitos grudam em vez de virarem vocabulário que eu reconheço sem realmente entender.