Communicating Trade-offs

A habilidade que mais diferencia um senior: articular decisões técnicas com clareza, explicando o que se ganha e o que se perde.

O que é

Trade-offs são compromissos inevitáveis em engenharia de software. Não existe solução perfeita — toda decisão tem custos e benefícios. Um senior não escolhe “a melhor tecnologia” — escolhe a mais adequada para o contexto e explica por quê.

Como funciona

Framework para comunicar trade-offs

1. Defina o problema claramente

“We needed to handle 10K concurrent users with sub-200ms response times while keeping development velocity high.”

2. Apresente as opções (2-3)

“We considered three approaches: a monolith with vertical scaling, microservices with horizontal scaling, or a modular monolith as middle ground.”

3. Analise cada opção

Para cada uma: complexidade, custo, performance, risco, tempo de implementação.

4. Explique a decisão e o porquê

“We chose the modular monolith because our team of 4 couldn’t sustain the operational overhead of microservices, and the load was manageable with proper caching and a read replica.”

5. Reconheça o que se perdeu

“The trade-off is that we can’t scale services independently. If we grow to 50K concurrent users, we’ll need to extract the booking service into its own deployment.”

Trade-offs clássicos

DecisãoGanhaPerde
Monolito → MicroserviçosEscala independente, deploy isoladoComplexidade operacional, latência de rede
SQL → NoSQLFlexibilidade de schema, escala horizontalTransações ACID, queries complexas
REST → GraphQLFlexibilidade de queries, sem over-fetchingComplexidade no backend, caching mais difícil
Consistência forte → EventualPerformance, disponibilidadeDados temporariamente desatualizados
Build vs BuyControle total, sem vendor lock-inTempo de desenvolvimento, manutenção

Vocabulário para entrevistas

Para apresentar opções:

  • “There are a few approaches we could take…”
  • “The main trade-off here is between X and Y…”
  • “One approach is… but the downside is…”

Para justificar decisões:

  • “Given our constraints — team size, timeline, scale — I’d recommend…”
  • “This is the right fit because…”
  • “We’re optimizing for X at the cost of Y, which is acceptable because…”

Para reconhecer limitações:

  • “The risk with this approach is…”
  • “If requirements change to X, we’d need to revisit this decision.”
  • “This works well up to N, beyond that we’d need to…”

Armadilhas comuns

  • Apresentar só a solução escolhida: sem mostrar alternativas, parece que não pensou
  • Absolutismos: “microserviços são sempre melhores” — sinal de inexperiência
  • Ignorar contexto: a melhor solução depende de: tamanho do time, prazo, escala, budget, conhecimento existente
  • Não reconhecer riscos: toda decisão tem downsides. Esconder isso é pior do que admitir.

Na prática (da minha experiência)

Na Muvz, a decisão de introduzir Kafka não foi óbvia. O trade-off era: Kafka trazia desacoplamento e resiliência (se um serviço cai, as mensagens ficam na fila), mas adicionava complexidade operacional (cluster Kafka em Kubernetes, monitoramento de lag, tratamento de mensagens duplicadas). A decisão foi válida porque os benefícios de desacoplamento eram essenciais para o negócio — os serviços precisavam funcionar independentemente.

How to explain in English

“One thing I’ve learned over 20 years is that there are no silver bullets in software engineering. Every decision is a trade-off, and a senior engineer’s value is in making those trade-offs explicit.

When I’m evaluating approaches, I consider five dimensions: complexity, cost, performance, team capability, and time to market. For example, when deciding between a monolith and microservices, I don’t default to microservices because they’re trendy. I ask: how big is the team? What’s the deployment frequency? What’s the expected scale? A team of 4 developers with a monolith that deploys 5 times a day is more productive than the same team wrestling with 10 microservices, Kubernetes, and distributed tracing.

I always present at least two alternatives when proposing a technical direction. Not to be indecisive, but to show I’ve considered the trade-offs and made a deliberate choice. And I’m always transparent about what we’re giving up — that honesty builds trust and makes it easier to revisit decisions when the context changes.”

Key vocabulary

  • compromisso técnico → trade-off
  • restrições → constraints
  • escalabilidade → scalability
  • complexidade operacional → operational complexity
  • custo de oportunidade → opportunity cost
  • dívida técnica → technical debt
  • análise custo-benefício → cost-benefit analysis

Veja também