Produto

RECOMENDADO

TESTE GRATUITO

Integrações

CONEXÕES UNIFICADAS

Visualize todas as suas assinaturas juntas para fornecer uma visão holística da saúde de suas empresas.

Recursos

Histórias verdadeiras de dimensionamento de engenharia

Por Josh Pigford em 11 de novembro de 2015
Última atualização em 23 de abril de 2026

Problemas de dimensionamento são problemas que surgem quando um sistema ou aplicativo é incapaz de lidar com quantidades exponencialmente maiores de dados ou tráfego de usuários. Recentemente escrevemos sobre como o freemium quase causou o colapso de nosso negócio devido a esses problemas de dimensionamento. Esta é uma história verdadeira sobre por que dimensionar um aplicativo nunca é tão fácil quanto parece.

Construir software é meio parecido com um conselheiro de acampamento entusiasmado e animado. No início, as crianças são deixadas por seus pais, uma ou duas de cada vez. Cada criança tem alguns pedidos especiais que precisam ser atendidos. Uma tem muita bagagem para ser armazenada. Outra é vegetariana. Outra apenas quer fazer tiro com arco e mais nada.

Tudo bem.

Depois, ônibus cheios de crianças começam a ser deixados — todas acampando gratuitamente, mas todas com bagagem, restrições alimentares, problemas de planejamento. Nada divertido.

Ao final do dia… o pobre conselheiro está destruído.

Software e conselheiros de acampamento têm tanto em comum.

O rastro de boas intenções

  • Escreva seu aplicativo em Rails e use Postgres — Tudo é ótimo!
  • Adicione um webhook simples para Stripe em Rails como um controlador no aplicativo principal — Estamos indo bem!
  • Comece a calcular em segundo plano — use Sidekiq — Ainda ótimo!
  • Até que um cliente se inscreva e envie mais de 20.000 eventos em um período de 24 horas.
  • Agora, esse webhook simples está deixando o painel principal lento
  • Retire o webhook para seu próprio microsserviço pequeno — ele vinha funcionando há meses sem intervenção…
  • Importar dados do Stripe por meses funciona ótimo até que um cliente se inscreva com 8.000 eventos em um único dia.
  • Agora temos que importar por segmento (2–3 dias de movimento perdidos)
  • Nesse mesmo tempo, mais contas se inscrevem, precisamos de mais workers… sem problemas, ative-os!
  • Mas espera, workers de alta memória no Heroku literalmente custam um braço, uma perna, um rim e o filho primogênito.
  • Somos um negócio bootstrapped, não podemos gastar com isso. Hora de mudar para AWS. Isso é totalmente razoável.
  • Eeeek, agora puxar dados para testes locais se torna quase impossível, o que retarda o desenvolvimento. Suspiro.
  • Problemas dos workers resolvidos.
  • Oh, mas PG tem um problema de limite de conexão mal digno de menção…
  • Tudo bem, ative pgbouncer em cada máquina
  • Fantástico! Isso funciona, até que não — finalmente mude pgbouncer para sua própria máquina — problemas de conexão resolvidos
  • Oh, mas nesse meio tempo, as consultas no servidor de banco de dados estão destruindo a CPU
  • Nesse caso, retire uma tabela de alto tráfego para seu próprio banco de dados separado
  • Bem, que legal, existem problemas de limite de conexão com o novo banco de dados (repita as lições aprendidas anteriormente)
  • Oh, alguém se inscreveu com 4.000 planos — todos os nossos workers por plano estão falhando.
  • Nesse meio tempo, o material de marketing no aplicativo principal funciona ótimo inicialmente
  • Até que o marketing realmente funciona e milhares de pessoas vão olhar para ele
  • O que mata o tempo de resposta do painel principal para clientes pagantes
  • O que significa que temos que dividir rapidamente o site de marketing e o aplicativo em peças separadas
  • E assim continua…

Não poderíamos ter sabido sobre nada disso no início. Claro, poderíamos ter assumido otimizado para isso, mas então também nunca teríamos lançado o produto em primeiro lugar porque estaríamos passando toda a eternidade otimizando para uma escala que não tínhamos.

Construir e, mais importante, lançar software é sobre a constante troca entre movimento para frente e estabilidade presente.

Silicon Valley está cheia de túmulos de startups que nunca realmente lançaram nada porque estavam determinadas a corrigir problemas que não tinham. Lançar é melhor do que morrer antes de nunca sair da pista. E sim, estou ciente de que é uma metáfora desajeitada. Mas pelo menos eu lancei. 🙂

Josh Pigford

Josh é mais famoso como fundador de Baremetrics. Porém, muito antes de Baremetrics e até hoje, Josh tem sido um maker, construtor e empresário. Sua carreira começou em 2003 construindo um par de diretórios de links, ReallyDumbStuff e ReallyFunArcade. Antes de vender isso com lucro, ele já havia iniciado seu próximo conjunto de projetos. Como especialista em design, começou a consultar sobre projetos de web design. Essa empresa acabou se transformando em Sabotage Media, que tem sido a empresa de fachada para muitos de seus projetos desde então. Alguns de seus maiores projetos antes de Baremetrics foram TrackThePack, Deck Foundry, PopSurvey e Temper. Os pontos problemáticos que ele vivenciou quando PopSurvey e Temper decolaram foram a razão pela qual ele criou Baremetrics. Atualmente, ele está dedicado a Maybe, o sistema operacional para suas finanças pessoais.