Skip to content

Design Is Compromise

A UX principle for coding agents. Also covers design is compromise, compromise, opinionated design, no compromises, uncompromising design, tradeoff, and 2 more.

Show all 8 aliases

design is compromise, compromise, opinionated design, no compromises, uncompromising design, tradeoff, choosing weaknesses, appealing to everyone

Core idea from Steph Ango's essay "Design is compromise" (stephango.com/design-is-compromise): compromise is neither good nor bad — it is decision-making. Prioritizing. Deciding one thing matters more than another. Which compromises you make is what defines good design. Use this doc when a design tries to please everyone, when a product claims "no compromises," or when a decision stalls because every option has a downside.

Every Decision Is a Tradeoff

Once you decide on an approach, you inherently decide against other options. "Uncompromising" products don't exist; the claim only hides which compromises were made.

  • Another word for compromise is tradeoff: you are trading a weakness for a strength. Name both sides explicitly.
  • When comparing options, don't ask "which has no downsides?" — none do. Ask "which downside is right for this audience?"
  • A decision that stalls because every option costs something isn't blocked; it's waiting for someone to own a weakness. Owning the weakness is the decision.

Be Opinionated, Not Well-Rounded

Appealing to everyone is impossible. Aiming to be good across a broad range of capabilities is itself a compromise: it's choosing not to be exceptional at anything in particular.

  • The best products make a clear statement about what they are not good at, in favor of being much better at something else.
  • The more you tip the scale toward a strength, the weaker something else becomes. That's expected, not a flaw to patch. Backfilling every weakness dilutes the strength you paid for it.
  • In UI terms: one primary action per screen (see design-process.md — One Screen, One Purpose), everything anchored to the screen's single job (see ui/distill.md — Start From the One Job), rare paths deferred (P2, progressive disclosure) rather than promoted to parity.
  • The kitchen-sink surface is what refusing to compromise looks like: everything present, nothing leading (see anti-patterns.md).

Choose Compromises for Your Audience

Good design is choosing the right compromise for your audience — not the fewest compromises, and not your own preferences.

  • Anchor each tradeoff to the primary user and their job. A pro tool trades onboarding ease for density and speed; a consumer tool trades power for approachability. Both are correct for their audience and wrong for the other's.
  • When stakeholders push to serve every segment equally, make the cost visible: serving everyone equally means serving no one exceptionally. That might genuinely be the right compromise for a broad audience — but state it as one, don't drift into it.
  • Write the tradeoff down where the team can see it ("we optimize for X at the cost of Y"). An undocumented compromise gets "fixed" by the next contributor, eroding the opinion the product was built on.

Defend the Compromise

Making difficult choices is what people pay designers for. Be proud of your compromises instead of apologizing for them.

  • When feedback criticizes the product for a weakness you chose deliberately, recognize it as the receipt for a strength — don't reflexively patch it. A request that serves someone you decided not to build for is already answered (see understanding-users.md — Anti-Personas).
  • Revisit a tradeoff when the audience or job changes, not merely because someone noticed the weak side. The weak side was always there; you put it there on purpose.

Use this guidance in your coding agent

Install the Better Design MCP once. Your agent then loads this page with one call.

get-ux-principle({ topic: "tradeoffs" })
claude mcp add --scope user better-design --transport http https://better-design.com/api/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
Browse related design systems