Yan B. — Backend Engineer Entry · 19.08.26

Catálogo 4 min

The L.A.B.

Set
Contents · 9 sections
  1. 1. O que é isso?
  2. 2. Por que eu construí isso?
  3. 3. Como funciona
  4. 3.1. A prateleira
  5. 3.2. A metade que explica
  6. 3.3. A metade que roda
  7. 3.4. Os eixos são o ponto
  8. 3.5. O que vem depois de paginação
  9. 4. Onde isso está agora

1. O que é isso?

O Lab é um lugar onde eu testo conceitos de backend na frente de todo mundo.

Cada conceito vira um experimento, e todo experimento tem duas metades. A primeira explica a coisa: o que é, por que existe, quais são as variantes e no que elas diferem. A segunda deixa você rodar. Você escolhe os parâmetros, aperta o botão, e vê o que voltou junto com quanto tempo levou e qual SQL foi realmente executado.

LAB é Logic, Architecture & Benchmarking, que é mais ou menos a ordem em que as coisas acontecem lá dentro: a lógica do conceito, a arquitetura que o implementa, e a medição no fim.

2. Por que eu construí isso?

Porque texto sobre performance envelhece mal na sua cabeça.

Eu já escrevi sobre paginação. Escrevi que offset fica linearmente mais lento conforme você desce, que cursor não fica, e que a contagem total custa caro numa tabela grande. Tudo verdade. E mesmo assim, “offset fica mais lento nas páginas profundas” é uma frase que você lê, concorda e esquece, porque nada aconteceu com você. Ninguém te fez esperar.

O que gruda é digitar page: 4000, apertar o botão, e ver o número do tempo pular. Aí você muda a estratégia para keyset, aperta de novo, e ele volta para onde estava. Isso é meio segundo de trabalho e vale mais do que três parágrafos meus.

Tem um segundo motivo, mais egoísta: eu queria um lugar para testar essas coisas de forma comparável. Não “eu acho que Prisma gera um SQL pior aqui”, mas o SQL dos dois na tela, um debaixo do outro, mesma tabela, mesmos parâmetros. Se o lugar já existe para mim, custa pouco deixar aberto.

3. Como funciona

3.1. A prateleira

A barra lateral é a lista inteira, agrupada por categoria: paginação, cache, banco de dados, conceitos de API. Cada item é um experimento e cada experimento é um conceito só.

Essa é a única regra de organização que eu me impus. Um lab não é “banco de dados”, é “o problema N+1”. Não é “segurança”, é “rate limiting”. Um conceito que não cabe em uma sessão de leitura é dois labs, não um.

O motivo é prático. Cada lab é uma pasta que eu consigo ler de uma vez e apagar de uma vez quando o experimento não deu em nada. O eixo em que esse projeto cresce é a quantidade de labs, então é a quantidade de labs que precisa ser barata.

3.2. A metade que explica

Antes de qualquer botão, o texto. O que é o conceito, por que ele existe, e aí uma linha para cada variante dizendo o que ela te dá e o que ela te cobra.

E fecha com uma implementação de referência. Código de verdade, o suficiente para você copiar e adaptar, não pseudocódigo.

3.3. A metade que roda

Em cima, os eixos que você pode girar. Estratégia (offset, page, cursor, keyset, infinite), banco, e implementação: SQL puro, Prisma ou TypeORM.

À esquerda você monta a requisição: tamanho da página, posição, campo e direção de ordenação, filtros, contagem total ligada ou desligada. À direita, o que aconteceu.

E o que aconteceu são quatro coisas. Os números no topo, com o tempo da consulta. O SQL que foi realmente executado, não uma versão didática dele. As linhas que voltaram, numa tabela. E o metadata cru, o JSON que um cliente de verdade receberia, com totalItems e totalPages e o cursor da próxima página.

3.4. Os eixos são o ponto

Cada seletor ali em cima existe para ser trocado enquanto o resto fica parado.

Mesma estratégia, três implementações: você está comparando o que o ORM faz com a sua intenção. Mesma implementação, quatro estratégias: você está comparando as estratégias sem que ninguém possa culpar o ORM. Mesma configuração, página 1 e página 4000: você está olhando o custo da profundidade.

É um experimento controlado com a variável independente virando um botão. Nada mais que isso, e não precisa ser mais que isso.

3.5. O que vem depois de paginação

Paginação é só o primeiro exemplo usado nesse post. O L.A.B. serve para qualquer coisa que eu queira escrever sobre. Banco de dados (índices, N+1, locks, joins), Caching (In-memory, redis, cdn, invalidação), APIs (REST, GraphQL, rate limiting, webhooks), Infra e até segurança são ideias a serem exploradas.

4. Onde isso está agora

Em construção, e vale ser específico sobre o que isso significa.

A casca está de pé: navegação, layout das páginas, o formato de explicação mais sandbox, o backend em Fastify com Postgres e Redis subindo em Docker. Os 19 experimentos que você vê listados na barra lateral são principalmente títulos e dados falsos por enquanto.

O de paginação é o que está sendo levado a sério primeiro, contra uma tabela de verdade com um milhão de linhas, porque é o que prova que a ideia funciona.

← Back to the catalogue

↑ Top