Skip to main content

Command Palette

Search for a command to run...

Escalar sistema é fácil. Escalar decisão é o problema.

Updated
9 min read

Existe um momento em que a conversa do time muda. No começo, “escala” significa CPU, memória, instâncias, banco, cache, fila. Você aprende a medir, otimizar, particionar. E funciona. Você coloca mais máquina, mais observabilidade, mais disciplina operacional e o sistema aguenta.

Até o dia em que ele continua aguentando… e o time começa a falhar.

É aí que a ficha cai: o gargalo raramente é banco, fila ou cache. O gargalo é consenso. Não o consenso filosófico — o consenso operacional: quem decide, como decide, quanto custa decidir e o que acontece quando ninguém decide.

A maioria dos times experientes já viu isso acontecer: tecnologia “correta”, arquitetura “moderna”, cloud “pronta”. Mesmo assim, entrega desacelera, incidentes aumentam, e todo mundo tem a sensação de que está trabalhando mais para produzir menos.

Este texto é sobre isso: por que “escalar decisão” é mais difícil do que escalar sistema, e como desenhar autonomia, limites claros e mecanismos de decisão que não viram burocracia.

O mito da escala técnica como problema principal

Quando você está começando, quase todo problema parece técnico. E em muitos casos é mesmo: uma query ruim derruba o banco, uma API síncrona vira gargalo, um serviço sem cache vira um aspirador de latência.

Mas a escala técnica tem uma característica importante: ela é relativamente objetiva. Você mede, você experimenta, você compara. Há ambiguidade, claro, mas a natureza do problema é concretizável: o tempo de resposta subiu, o throughput caiu, o custo explodiu.

Já a escala de decisão é diferente. Ela é humana e distribuída. Ela envolve responsabilidades, incentivos, medo de errar, dependências organizacionais, e um elemento que times pequenos quase não sentem: o custo de sincronização.

Em um time pequeno, sincronizar é fácil. Você olha para o lado, pergunta, decide. Em um time grande, a mesma pergunta vira reunião, alinhamento, dependência, agenda, comitê informal, dúvida sobre “quem tem a caneta”, e por fim uma decisão que chega tarde l, ou não chega.

E quando a decisão chega tarde, ela chega com juros: você já escreveu código, já integrou errado, já alinhou com produto, já prometeu em roadmap. A decisão vira um “desfazer e refazer” caro, e o time passa a evitar decisões difíceis. Isso cria um ciclo muito específico: mais dúvida → mais dependência → mais reuniões → mais atraso → mais aversão a decidir → mais dúvida.

O verdadeiro gargalo: coordenação e consenso

Coordenação é o trabalho invisível de manter múltiplas pessoas seguindo na mesma direção. Quando você escala pessoas, você escala necessidade de coordenação.

Pensa assim: um sistema distribuído precisa de mensagens para manter consistência. Uma organização distribuída também. Só que, no sistema, mensagens são baratas e previsíveis. Na organização, mensagens custam tempo, energia, confiança, status e, às vezes, política.

O custo do consenso cresce rápido porque ele traz três atritos ao mesmo tempo:

  1. Aumento de participantes: mais times e stakeholders precisam “estar confortáveis”.

  2. Aumento de dependências: decisões passam a depender de decisões anteriores ou paralelas.

  3. Aumento de risco percebido: quanto maior o impacto, mais gente quer revisar — mesmo sem responsabilidade direta.

O resultado típico é uma espécie de “latência organizacional”. Nada está explicitamente bloqueado, mas tudo anda devagar. E, para devs menos experientes, isso é confuso: “Mas a solução está certa. Por que não vai?”

Porque a solução técnica certa pode existir dentro de uma decisão organizacional errada. E decisões organizacionais erradas frequentemente são decisões implícitas: ninguém decidiu, então o padrão antigo ficou. Ninguém assumiu ownership, então todo mundo opina. Ninguém estabeleceu limites, então tudo vira discussão global.

Times grandes quebram com tecnologia “correta” porque a arquitetura real não é o código

Quando a escala cresce, a arquitetura que mais influencia o resultado não é a do diagrama. É a arquitetura de decisão.

Você pode ter microserviços bem desenhados, observabilidade impecável, pipelines sólidos, e ainda assim sofrer com:

  • PRs que demoram dias porque “todo mundo precisa revisar”.

  • Mudanças pequenas que viram epopeias porque dependem de três times e duas filas.

  • Roadmap que vira disputa de território.

  • Incidentes que viram caça às bruxas ou, pior, viram silêncio.

  • Regras de negócio duplicadas porque integrar é mais caro do que copiar.

Isso acontece porque o sistema técnico está otimizado, mas o sistema social está em deadlock.

A pergunta útil não é “qual stack usamos?”, mas “como a decisão flui?”. Quem tem autonomia para mudar uma peça? Quais decisões exigem alinhamento? Quais decisões podem ser feitas localmente com segurança? Se a resposta é “depende” para tudo, você já tem um problema.

Autonomia não é “cada time faz o que quer”

Quando alguém ouve “autonomia”, costuma imaginar caos controlado: cada squad escolhe ferramenta, padrão, banco, observabilidade, e a empresa vira um zoológico tecnológico.

Isso não é autonomia. Isso é ausência de limites.

Autonomia saudável é a capacidade de um time tomar decisões sem pedir permissão porque o sistema tem limites claros que tornam essas decisões seguras. É como programação defensiva: você não confia porque “todo mundo é competente”. Você confia porque o design reduz o raio de explosão.

Autonomia de verdade nasce quando você responde três perguntas sem hesitação:

  1. O que é responsabilidade deste time?

  2. Quais são as interfaces e contratos com o resto do sistema?

  3. Quais decisões este time pode tomar sozinho, e quais precisam de alinhamento?

Se isso não está explícito, autonomia vira política. E política é um tipo de fila: só que invisível e sem métrica de throughput.

Limites claros: o que são e por que importam

Limites claros são as fronteiras que transformam um grande problema em vários problemas menores, decidíveis, e com baixa necessidade de consenso.

Você pode estabelecer limites de várias formas e o detalhe importante é que limite não é só técnico. Um limite pode ser:

  • De domínio: este time é responsável por “crédito”, aquele por “investimentos”.

  • De dados: este conjunto de dados pertence a este time; outros acessam via contrato.

  • De operação: este time responde por incidentes e SLOs desta área.

  • De mudança: este time pode alterar isso sem aprovação externa, desde que mantenha compatibilidade do contrato.

Quando o limite é real, ele reduz a necessidade de reuniões porque reduz a necessidade de permissão. E, quando isso acontece, decisões passam a ser tomadas mais perto do problema, onde há mais contexto e menos ruído.

O oposto também é verdadeiro: quando os limites são nebulosos, cada mudança vira um plebiscito. E plebiscito é um modelo de decisão péssimo para engenharia.

ADRs: documentação não para explicar, mas para reduzir custo de alinhamento

ADR (Architecture Decision Record) é frequentemente mal entendido como “mais um documento”. Se virar isso, vira lixo em dois sprints.

A função de um ADR não é registrar uma decisão para o futuro distante. A função é reduzir custo de consenso hoje e reduzir reabertura de discussão amanhã.

Quando bem usado, um ADR faz três coisas com clareza:

  • Contexto: que problema estamos resolvendo e por que agora.

  • Decisão: o que escolhemos, em termos operacionais.

  • Consequências: o que isso habilita e o que isso custa.

O ponto mais importante para times menos experientes é entender que ADR não é “prova de que você está certo”. ADR é “prova de que você pensou”. Ele permite que outra pessoa discorde com base no mesmo cenário, e não com base em impressões.

E existe um benefício quase mágico quando ADR vira hábito: ele cria um histórico de raciocínio. Quando alguém chega novo e pergunta “por que isso é assim?”, a resposta deixa de ser uma lenda oral e vira aprendizado reutilizável.

Uma boa regra prática: se uma decisão está custando mais de uma conversa curta e tende a voltar toda vez que alguém novo entra, ela merece um ADR.

O que “escalar decisão” exige na prática

Você não escala decisão com mais reuniões. Você escala decisão com mecanismos.

Mecanismos são estruturas repetíveis que tornam o caminho da decisão previsível. Eles tiram o peso do improviso e diminuem a chance de a organização entrar em deadlock.

Alguns mecanismos úteis aparecem sempre, mesmo em culturas diferentes:

Ownership explícito (com caneta clara)

Se ninguém sabe quem decide, todo mundo opina. Se todo mundo opina, ninguém é responsável. E se ninguém é responsável, a decisão vira atraso.

Ownership não é “quem implementa”. É “quem responde pelo resultado”. Isso muda completamente a conversa, porque força trade-offs reais.

Interfaces como contratos, não como gentileza

A promessa de microserviços, módulos ou domínios só se cumpre se integração for baseada em contratos claros. Quando contratos são frouxos, cada mudança vira negociação humana e aí você voltou para o gargalo de consenso.

Contratos reduzem a necessidade de alinhamento constante, porque substituem “conversa” por “compatibilidade”.

SLOs e limites de impacto

Quando um time tem SLO e responde por ele, ele ganha um eixo de decisão. Ele deixa de decidir com base em preferências e passa a decidir com base em metas observáveis.

E, se o raio de explosão de uma mudança é pequeno, a organização tolera mais autonomia. A autonomia cresce quando o risco é contido.

Ritmo de decisão (cadência)

Algumas decisões são pequenas e contínuas. Outras são grandes e raras. Misturar tudo no mesmo canal é receita para caos.

Uma cadência explícita ajuda: decisões locais seguem um fluxo leve; decisões cross-team têm uma janela de revisão; decisões de alto impacto têm um fórum claro e raro. A beleza aqui é que você não está burocratizando, você está dando previsibilidade.

Se você quiser um único princípio para guardar: decisão precisa de caminho. Sem caminho, ela vira política.

Um diagnóstico simples: onde sua organização está travando

Se você está tentando entender se o seu problema é “escala de decisão”, observe sinais bem concretos:

  • O lead time cresce mesmo quando a infraestrutura está estável.

  • O número de dependências por entrega aumenta.

  • Mudanças pequenas exigem alinhamento com muita gente.

  • Discussões retornam porque ninguém sabe “qual foi a decisão”.

  • O padrão “vamos criar um grupo para discutir” aparece com frequência.

  • Times evitam tocar em áreas “sensíveis” do sistema, mesmo quando o código é simples.

Nada disso se resolve com refactor, Kafka ou um cache a mais. Isso se resolve desenhando melhor como a organização decide.

O objetivo não é decidir rápido. É decidir de forma sustentável.

Decidir rápido pode ser só imprudência organizada. Decidir devagar pode ser só medo institucionalizado. O que você quer é um sistema de decisão que seja sustentável: decisões locais onde possível, alinhamento onde necessário, e documentação suficiente para não reiniciar a discussão do zero a cada trimestre.

Quando você consegue isso, acontece uma mudança sutil, mas poderosa: o time para de “pedir autorização” e começa a “assumir responsabilidade”. A engenharia muda de postura. E, quase sempre, a entrega melhora sem nenhuma troca de stack.

Escalar sistema é importante. Mas, depois de certo ponto, isso é só a parte visível do iceberg.

Escalar decisão é onde as organizações se tornam boas ou passam o resto da vida tentando entender por que a empresa tem tecnologia de ponta e execução de quinta.

E aí fica uma última provocação, bem prática: se amanhã você dobrar o número de times, o seu sistema aguenta. Mas o seu processo de decisão aguenta?

Se a resposta não for um “sim” confortável, talvez você já tenha encontrado o verdadeiro gargalo.

More from this blog

Pedro Xavier

15 posts

Oi, Sou Pedro Xavier, desenvolvedor especialista atualmente no setor bancário e apaixonado por jogos. Aqui, compartilho ideias, práticas e novidades sobre tecnologia e desenvolvimento de software.