Pular para o conteúdo principal

Conceitointermediário

Comunicação de Trade-offs

Visão Geral

A pergunta que o avaliador está respondendo o tempo todo não é "esta arquitetura está certa?". É:

"eu confiaria a esta pessoa uma decisão arquitetural
que eu não vou revisar?"

E o que responde a isso não é a solução — é a capacidade de dizer o que ela custa. Uma escolha apresentada como obviamente correta sinaliza que o candidato não viu o custo; a mesma escolha apresentada com o custo nomeado sinaliza que ele viu e decidiu.

A forma canônica cabe em uma frase:

"escolho X, porque [razão ligada a um requisito].
Abro mão de Y.
Se [condição] fosse diferente, eu escolheria Z."

Três partes. A terceira é a que quase ninguém diz, e é a que mais vale.

Problema

Três padrões.

Apresentar sem custo. "Vou usar cache." A afirmação está certa e não demonstra nada — ela não diz o que se perde, nem quando não valeria.

Desenhar em silêncio. O candidato pensa bem e fala pouco. O avaliador não avalia pensamento, avalia o que é comunicado — e um desenho silencioso é indistinguível de um desenho memorizado.

Hedge permanente. O oposto: "poderia ser assim, ou assim, depende". Nunca decidir é pior que decidir errado. Uma entrevista de arquitetura avalia a capacidade de escolher sob incerteza, e não escolher é a única resposta que não demonstra isso.

Conceitos Centrais

A estrutura de três partes

"vou materializar o feed na escrita, porque a razão leitura/escrita
é 100 para 1 e leitura é o que domina o custo.

Abro mão de frescor: uma postagem leva até 30 segundos para
aparecer, o que o requisito permite. E abro mão de simplicidade —
passo a ter dois caminhos de leitura e uma consistência a
gerenciar.

Se a razão fosse 5 para 1, ou se o requisito de frescor fosse de
2 segundos, eu montaria na leitura."

A terceira parte é a que separa. Ela demonstra que o candidato entende por que a escolha é correta neste contexto, e não em geral — que é a diferença entre arquitetura e receita.

Ela também tem uma função defensiva. Quando o entrevistador introduz uma variação — "e se o requisito de frescor fosse de 2 segundos?" —, o candidato que já enunciou a condição responde em segundos, porque a análise já foi feita. O que não a enunciou precisa refazer o raciocínio ao vivo, sob pressão, e frequentemente chega a uma resposta inconsistente com o que disse antes.

Enunciar a condição de inversão é, na prática, antecipar a pergunta seguinte da entrevista.

Enuncie enquanto desenha, não depois

ruim desenhar tudo em silêncio, e ao fim: "algum trade-off?"
bom enunciar no momento em que a caixa entra no desenho

Trade-offs ditos no momento têm outro efeito: eles convidam o entrevistador a discordar cedo, o que é bom. Uma objeção no minuto 15 é uma correção de rumo; a mesma objeção no minuto 40 é uma refutação do desenho inteiro.

Nomeie o custo, não o risco genérico

ruim "cache adiciona complexidade"
bom "cache adiciona um componente a operar, uma estratégia de
invalidação a manter, e uma janela em que o dado exibido
pode estar desatualizado — que aqui é de até 60 segundos"

Custo nomeado é verificável. "Complexidade" é uma palavra que serve a qualquer decisão e não informa qual.

Um teste útil: o custo enunciado poderia ser usado para argumentar contra outra decisão qualquer? Se sim, ele é genérico. "Mais um componente no plantão" serve a quase tudo; "uma janela de até 60 segundos em que o dado exibido pode estar desatualizado" só serve àquela decisão, e é por isso que ela informa.

Use os requisitos como âncora

"o requisito de 99,99% no redirecionamento e 99,9% na criação é
o que me permite aceitar que a criação falhe durante a promoção
da réplica. Se os dois fossem 99,99%, eu precisaria de escrita
multirregional — e aí a latência de criação subiria."

Amarrar cada trade-off a um requisito levantado na clarificação fecha o ciclo da entrevista e demonstra que o método foi seguido, não decorado. Ver funcionais vs. não funcionais.

Ofereça a alternativa que você não escolheu

"a alternativa seria manter tudo síncrono e aceitar a
disponibilidade composta de 98,1%. É mais simples, tem menos
componentes, e não precisa de estado intermediário nem de
comunicação de 'processando' ao usuário.

Eu não escolho isso porque o requisito contratual é 99,5%.
Se não houvesse esse contrato, provavelmente eu ficaria com
o síncrono."

Apresentar a alternativa com seus méritos reais — e não como espantalho — é o sinal mais forte de maturidade técnica. Ver alternativas em ADR.

Discorde com base, e mude de ideia com base

Entrevistadores frequentemente propõem alternativas para testar a reação:

"por que não usar um banco de grafos aqui?"

Duas respostas ruins: aceitar imediatamente ("boa ideia, vou mudar") e defender por defender.

"consideraria. As consultas aqui são de um salto — quem eu sigo,
quem me segue — e um relacional com dois índices resolve, com
um armazenamento a menos para operar.
Se houvesse consultas de múltiplos saltos, como sugestão de
conexões por caminho, aí o grafo compensaria. Você tem algum
caso assim em mente?"

Isso demonstra que a posição tem base, e que ela é revisável diante de informação nova — que é exatamente o comportamento desejado.

Reconheça incerteza sem se paralisar

"não tenho experiência operando esse mecanismo em escala, então
minha estimativa de custo operacional é fraca. Vou assumir que
é comparável ao equivalente que já operei, e sinalizar isso
como um risco da proposta."

Admitir o limite do próprio conhecimento e seguir decidindo é melhor avaliado que fingir domínio. O que é mal avaliado é a paralisia.

E fingir domínio é detectável com uma pergunta de acompanhamento, o que torna o custo do fingimento alto e o benefício momentâneo. Sinalizar o risco de uma premissa fraca, ao contrário, transfere a informação para quem pode corrigi-la — que é o comportamento esperado de alguém que vai tomar decisões em equipe.

Modelo Mental

Escolho X, abro mão de Y, e sob a condição Z escolheria outra coisa. A terceira parte é a que demonstra arquitetura.

Quando Usar

  • Continuamente, no momento em que cada decisão é tomada.
  • Ancorando em requisitos levantados na clarificação.
  • Ao responder a qualquer alternativa proposta pelo entrevistador.

Quando Não Usar

Sem decidir — hedge permanente é pior que escolha errada.

Com custo genérico — "adiciona complexidade" não informa.

Só ao final, quando o desenho já está fechado.

Defendendo por defender uma escolha diante de informação nova.

Sem a condição de inversão — sem ela, a escolha parece dogma.

Alternativas

  • Tabela de comparação — quando há três opções e o quadro comporta; mais lento e mais claro.
  • Declarar prioridade uma vez — "disponibilidade acima de consistência neste sistema" — e derivar as escolhas seguintes dela.
  • Perguntar a preferência — "você prefere que eu otimize para custo ou para latência?" é legítimo e produtivo.

A segunda é eficiente: uma prioridade declarada no início economiza a repetição do trade-off a cada decisão.

Trade-offs

Enunciar cada trade-offDeclarar prioridade uma vez
Demonstra a cada decisãoMais rápido
Consome tempoMenos explícito
Convida correção cedoExige coerência
Defender a escolhaCeder à sugestão
Demonstra convicçãoDemonstra abertura
Risco de teimosiaRisco de não ter posição

A resposta correta quase sempre está no meio: reconhecer o mérito da sugestão, explicar a base da escolha, e pedir a informação que decidiria.

Modos de Falha

Desenho silencioso. Indistinguível de memorização.

Sem custo nomeado. Sugere que o custo não foi visto.

Sem condição de inversão. A escolha parece dogma.

Hedge permanente. Não demonstra capacidade de decidir.

Ceder a toda sugestão. Sugere ausência de posição.

Espantalho. Apresentar a alternativa fraca de propósito é notado.

Erros Comuns

Dizer "adiciona complexidade" em vez de nomear o custo.

Não ancorar em requisitos.

Enunciar trade-offs só no fim.

Reagir defensivamente a uma alternativa proposta.

Não perguntar a informação que decidiria a dúvida.

Exemplo de Entrevista

Contexto. Encurtador de URL, decisão sobre como gerar o código curto.

Comunicação da decisão:

"Vou gerar o código a partir de um contador global codificado
em base 62, em vez de hash da URL.

A razão: contador garante unicidade sem verificação. Hash exige
checar colisão, e checar colisão a 120 escritas por segundo
introduz uma leitura antes de cada escrita e um caminho de
erro para o caso raro.

Abro mão de duas coisas. Primeiro, os códigos ficam
sequencialmente adivinháveis — alguém pode enumerar links. Se
privacidade importar, eu embaralharia o contador com uma
permutação, o que custa quase nada.

Segundo, o contador é um ponto de coordenação. A 120 por
segundo isso é irrelevante, mas se fôssemos a 100 mil por
segundo, um contador único seria gargalo — e aí eu usaria
faixas pré-alocadas por instância, aceitando lacunas na
sequência.

Se a mesma URL precisasse sempre gerar o mesmo código curto,
aí hash seria obrigatório, e eu aceitaria o custo da
verificação de colisão."

Quatro elementos numa resposta de um minuto: a escolha, a razão ligada a um número, dois custos nomeados com mitigação, e duas condições que inverteriam a decisão.

Entrevistador propõe alternativa:

"por que não UUID?"

"Funcionaria e resolve unicidade sem coordenação nenhuma, que
é a vantagem real. O problema é o comprimento: um UUID em
base 62 dá 22 caracteres, e o produto é um encurtador — um
link de 22 caracteres é pouco mais curto que muitas URLs
originais.

Se o requisito de brevidade não existisse — num sistema
interno de rastreamento, por exemplo —, UUID seria a escolha
melhor, porque elimina o ponto de coordenação.

Aqui o requisito de produto decide."

A resposta reconhece o mérito da alternativa, identifica a razão específica da recusa, e nomeia o contexto em que ela venceria. Nenhuma dessas três partes é sobre conhecimento técnico — todas são sobre comunicação de decisão.

Conceitos Relacionados

Exercício Prático

Pegue uma decisão de arquitetura que você tomou recentemente e escreva a frase de três partes: escolhi X porque Y, abri mão de Z, e sob a condição W escolheria outra coisa.

Se você não conseguir preencher a terceira parte, a decisão foi tomada sem alternativa real — o que é a mesma lacuna que uma entrevista expõe.

Perguntas de Entrevista

  • Por que a condição que inverteria a escolha é a parte mais valiosa?
  • Por que enunciar trade-offs enquanto desenha é melhor que enunciá-los no fim?
  • Como responder a uma alternativa proposta pelo entrevistador sem ceder nem teimar?

Para Aprofundar

  • Ford, Neal et al. Fundamentals of Software Architecture. O'Reilly, 2020.
  • Hohpe, Gregor. The Software Architect Elevator. O'Reilly, 2020.
  • Xu, Alex. System Design Interview. Byte Code, 2020.
Terminou de ler este documento?Seu progresso fica salvo apenas neste navegador.