Skip to main content

Conceptintermediate

Communicating Trade-offs

Overview

The question the evaluator is answering the whole time is not "is this architecture right?". It is:

"would I trust this person with an architectural decision
that I am not going to review?"

And what answers that is not the solution — it is the ability to say what it costs. A choice presented as obviously correct signals that the candidate did not see the cost; the same choice presented with the cost named signals that they saw it and decided.

The canonical form fits in one sentence:

"I choose X, because [reason tied to a requirement].
I give up Y.
If [condition] were different, I would choose Z."

Three parts. The third is the one almost nobody says, and it is the one worth the most.

Problem

Three patterns.

Presenting with no cost. "I'll use a cache." The statement is right and demonstrates nothing — it does not say what is lost, nor when it would not be worth it.

Drawing in silence. The candidate thinks well and says little. The evaluator does not evaluate thinking, they evaluate what is communicated — and a silent design is indistinguishable from a memorized one.

Permanent hedging. The opposite: "it could be this way, or this way, it depends". Never deciding is worse than deciding wrong. An architecture interview evaluates the ability to choose under uncertainty, and not choosing is the one answer that does not demonstrate that.

Core Concepts

The three-part structure

"I'll materialize the feed on write, because the read/write ratio
is 100 to 1 and reads are what dominate the cost.

I give up freshness: a post takes up to 30 seconds to
appear, which the requirement allows. And I give up simplicity —
I now have two read paths and a consistency to
manage.

If the ratio were 5 to 1, or if the freshness requirement were
2 seconds, I would assemble on read."

The third part is what separates. It demonstrates that the candidate understands why the choice is correct in this context, and not in general — which is the difference between architecture and a recipe.

It also has a defensive function. When the interviewer introduces a variation — "and what if the freshness requirement were 2 seconds?" — the candidate who already stated the condition answers in seconds, because the analysis has been done. The one who did not state it has to redo the reasoning live, under pressure, and frequently arrives at an answer inconsistent with what they said before.

Stating the inversion condition is, in practice, anticipating the interview's next question.

State it while drawing, not afterwards

bad drawing everything in silence, and at the end: "any trade-offs?"
good stating it at the moment the box enters the design

Trade-offs said at the moment have another effect: they invite the interviewer to disagree early, which is good. An objection at minute 15 is a course correction; the same objection at minute 40 is a refutation of the whole design.

Name the cost, not a generic risk

bad "a cache adds complexity"
good "a cache adds one component to operate, an invalidation
strategy to maintain, and a window in which the data shown
may be stale — which here is up to 60 seconds"

A named cost is verifiable. "Complexity" is a word that serves any decision and informs about none.

A useful test: could the cost you stated be used to argue against any other decision? If so, it is generic. "One more component in the on-call rotation" serves almost everything; "a window of up to 60 seconds in which the data shown may be stale" only serves that decision, and that is why it informs.

Use the requirements as an anchor

"the 99.99% requirement on the redirect and 99.9% on creation is
what lets me accept that creation fails during the replica's
promotion. If both were 99.99%, I would need multi-region
writes — and then creation latency would rise."

Tying each trade-off to a requirement gathered during clarification closes the interview's loop and demonstrates that the method was followed, not memorized. See functional vs. non-functional.

Offer the alternative you did not choose

"the alternative would be to keep everything synchronous and accept the
compounded availability of 98.1%. It is simpler, has fewer
components, and needs no intermediate state and no
'processing' messaging to the user.

I don't choose it because the contractual requirement is 99.5%.
If that contract did not exist, I would probably stay with
the synchronous version."

Presenting the alternative with its real merits — and not as a straw man — is the strongest sign of technical maturity. See alternatives in an ADR.

Disagree on a basis, and change your mind on a basis

Interviewers frequently propose alternatives to test the reaction:

"why not use a graph database here?"

Two bad answers: accepting immediately ("good idea, I'll change it") and defending for the sake of defending.

"I would consider it. The queries here are a single hop — who I follow,
who follows me — and a relational database with two indexes solves it, with
one less storage system to operate.
If there were multi-hop queries, like connection suggestions
by path, then the graph would pay off. Do you have such a
case in mind?"

That demonstrates that the position has a basis, and that it is revisable in the face of new information — which is exactly the desired behavior.

Acknowledge uncertainty without freezing

"I have no experience operating that mechanism at scale, so
my estimate of its operational cost is weak. I'll assume it
is comparable to the equivalent I have operated, and flag that
as a risk of the proposal."

Admitting the limits of your own knowledge and continuing to decide is evaluated better than faking mastery. What is evaluated badly is paralysis.

And faking mastery is detectable with one follow-up question, which makes the cost of faking high and the benefit momentary. Flagging the risk of a weak assumption, by contrast, transfers the information to whoever can correct it — which is the expected behavior of someone who will make decisions in a team.

Mental Model

I choose X, I give up Y, and under condition Z I would choose otherwise. The third part is what demonstrates architecture.

When to Use

  • Continuously, at the moment each decision is made.
  • Anchored in requirements gathered during clarification.
  • When responding to any alternative proposed by the interviewer.

When Not to Use

Without deciding — permanent hedging is worse than a wrong choice.

With a generic cost — "adds complexity" informs nothing.

Only at the end, when the design is already closed.

Defending for the sake of defending a choice in the face of new information.

Without the inversion condition — without it, the choice looks like dogma.

Alternatives

  • Comparison table — when there are three options and the board allows it; slower and clearer.
  • Declare a priority once — "availability above consistency in this system" — and derive the subsequent choices from it.
  • Ask about the preference — "would you rather I optimize for cost or for latency?" is legitimate and productive.

The second is efficient: a priority declared at the start saves repeating the trade-off at every decision.

Trade-offs

State every trade-offDeclare a priority once
Demonstrates at each decisionFaster
Consumes timeLess explicit
Invites early correctionRequires coherence
Defend the choiceYield to the suggestion
Demonstrates convictionDemonstrates openness
Risk of stubbornnessRisk of having no position

The correct answer is almost always in the middle: acknowledge the suggestion's merit, explain the basis of the choice, and ask for the information that would decide it.

Failure Modes

Silent design. Indistinguishable from memorization.

No named cost. Suggests the cost was not seen.

No inversion condition. The choice looks like dogma.

Permanent hedging. Does not demonstrate the ability to decide.

Yielding to every suggestion. Suggests the absence of a position.

Straw man. Presenting the weak alternative on purpose is noticed.

Common Mistakes

Saying "it adds complexity" instead of naming the cost.

Not anchoring in requirements.

Stating trade-offs only at the end.

Reacting defensively to a proposed alternative.

Not asking for the information that would settle the doubt.

Interview Example

Context. URL shortener, decision about how to generate the short code.

Communicating the decision:

"I'll generate the code from a global counter encoded
in base 62, instead of a hash of the URL.

The reason: a counter guarantees uniqueness with no lookup. A hash requires
checking for collisions, and checking collisions at 120 writes per second
introduces a read before every write and an error
path for the rare case.

I give up two things. First, the codes become
sequentially guessable — someone can enumerate links. If
privacy matters, I would scramble the counter with a
permutation, which costs almost nothing.

Second, the counter is a coordination point. At 120 per
second that is irrelevant, but if we were at 100 thousand per
second, a single counter would be a bottleneck — and then I would use
pre-allocated ranges per instance, accepting gaps in the
sequence.

If the same URL always had to generate the same short code,
then a hash would be mandatory, and I would accept the cost of
collision checking."

Four elements in a one-minute answer: the choice, the reason tied to a number, two named costs with mitigations, and two conditions that would invert the decision.

The interviewer proposes an alternative:

"why not a UUID?"

"It would work and it solves uniqueness with no coordination at all, which
is the real advantage. The problem is the length: a UUID in
base 62 is 22 characters, and the product is a shortener — a
22-character link is barely shorter than many original
URLs.

If the brevity requirement did not exist — in an internal
tracking system, for example — a UUID would be the better
choice, because it eliminates the coordination point.

Here the product requirement decides."

The answer acknowledges the alternative's merit, identifies the specific reason for declining, and names the context in which it would win. None of those three parts is about technical knowledge — all of them are about communicating a decision.

Practical Exercise

Take an architectural decision you made recently and write the three-part sentence: I chose X because Y, I gave up Z, and under condition W I would choose otherwise.

If you cannot fill in the third part, the decision was made with no real alternative — which is the same gap an interview exposes.

Interview Questions

  • Why is the condition that would invert the choice the most valuable part?
  • Why is stating trade-offs while drawing better than stating them at the end?
  • How do you respond to an alternative proposed by the interviewer without yielding or being stubborn?

Further Reading

  • 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.
Finished reading this document?Your progress is saved in this browser only.