Trocando para (tenant_id, created_at) o índice passou a ser usado e a query caiu de 1.2s para 8ms.
Onde a evolução começa de verdade
01 · DuoStack
Sem playlist de oito horas. Uma lição curta, uma pergunta, e a resposta na hora.
Qual a saída de [1,2,3].map(x => x*2)?
O que uma closure captura?
02 · Code Runner
Um desafio, um editor e dez linguagens. Nada de pseudocódigo — é a solução que vai rodar.
03 · Battle
Quatro modos, do 1v1 ao caos full stack. Você entra numa sala aberta ou cria a sua — e a lista de lobbies é pública.
04 · System Design
Dez problemas clássicos, sessões salvas e um placar. Aqui não se responde múltipla escolha: se desenha arquitetura.
Desenhe a arquitetura, rode a simulação de tráfego e descubra o gargalo antes da produção.
Escolha um problema clássico de system design e comece a projetar.
Transforme URLs longas em links curtos que redirecionam em milissegundos.
Limite quantas requisições cada cliente pode fazer, com estado compartilhado.
Guarde e sirva blocos de texto por link, com expiração.
Entregue a timeline de quem você segue — o clássico de fan-out.
Mensagens em tempo real, entrega garantida e histórico.
Dispare push, e-mail e SMS para milhões, sem derrubar nada.
05 · Comunidade
Feed, fórum e quem está online, na mesma página. Não é chat solto: é o registro do que a casa está resolvendo agora.
Conecte-se com quem está construindo agora. Acompanhe o feed, participe do fórum e veja quem está online.
Trocando para (tenant_id, created_at) o índice passou a ser usado e a query caiu de 1.2s para 8ms.
Perdi um battle 1v1 por 40 segundos. Fui olhar o código do adversário depois: ele usou hash map onde eu fiz loop aninhado.
Descobri hoje que EXPLAIN ANALYZE mostra o tempo real e EXPLAIN só a estimativa. Estava lendo o número errado esse tempo todo.
Tenho uma query filtrando por tenant_id e ordenando por created_at.
Criei (created_at, tenant_id) e o plano continua fazendo seq scan.
A ordem importa porque o índice é uma árvore ordenada: ele só consegue pular para a faixa certa se a primeira coluna for a que você filtra por igualdade.
Regra prática que uso: igualdade primeiro, faixa depois, ordenação por último.
Rode EXPLAIN ANALYZE antes e depois. Com (tenant_id, created_at) o planner usa index scan e ainda aproveita a ordenação — some o sort node inteiro.
O ecossistema

Desenhe no canvas, rode a simulação, veja o gargalo acender. O motor é determinístico — a mesma arquitetura dá sempre a mesma nota.

Desafios executados em container isolado, com casos de teste reais. Sem sandbox de brinquedo.

Trilhas, lições e 8 tipos de exercício com XP, ofensiva e vidas. Você evolui praticando todo dia — no ritmo de quem joga Duolingo, só que escrevendo código de verdade.

Duelos de código em tempo real, 1v1 ou 2v2. Mesmo desafio, cronômetro correndo, placar, chat e plateia — vence quem passa mais testes. E o ranking sente.

Leia, comente e escreva artigos técnicos. Da carreira ao low-level, conteúdo produzido por quem está no código — para quem está no código.

Cinco frentes, uma conta. Dez problemas de System Design prontos, do encurtador de URL à inferência de LLM — o primeiro é grátis e não pede cartão.
// níveis de acesso
Do primeiro passo ao domínio absoluto.
Cada plano, um estágio da jornada.
>_ pronto_para_começar
Dez problemas de System Design prontos, trilhas com correção na hora, arena de duelos e execução real em container. O primeiro é grátis e não pede cartão.