What is “good taste” in software engineering?

What “Good Taste” Might Mean

  • Many see “taste” as the set of engineering values you prioritize (readability, performance, flexibility, etc.) and how you balance tradeoffs in a specific context.
  • Others argue “taste” is a poor label for what’s really intellectual humility and principled decision-making, not aesthetics.
  • A skeptical camp says “good taste in software” sounds narcissistic and is too subjective to be used in evaluation or hiring.

Subjective vs Objective Judgments

  • Some decisions are called objectively bad (e.g., obviously inefficient data structures), where “taste” isn’t relevant.
  • For most design choices, there are tradeoffs; “taste” is the judgment of when a tradeoff is worth it.
  • Several commenters prefer framing things as explicit principles (“minimize mutability”, “optimize for determinism”) rather than vague taste.

How Taste Develops

  • Widely agreed that taste comes from experience, especially maintaining others’ “clever” systems over years and seeing what ages badly.
  • Working across many domains, stacks, and both “good” and “bad” codebases sharpens intuition about complexity, future change, and failure modes.
  • “Broken compass” metaphors:
    • Obvious bad-taste engineers are easy to filter.
    • More dangerous are partially competent devs (cargo‑cult, tutorial‑only, LLM‑dependent, edge‑case layering) who scale systems until they fail catastrophically.

Examples of Good vs Bad Taste

  • Good taste associated with:
    • Simple, boring, composable code; minimal cognitive load.
    • Clear separation of concerns (e.g., pure logic vs input parsing).
    • Small, targeted changes for new features; APIs that centralize edge‑case handling.
    • Picking stacks and infra that can be swapped or evolved.
  • Bad taste associated with:
    • Overcomplication, premature abstractions, unnecessary frameworks/microservices.
    • Copy‑paste, ignoring abstractions, or forcing one paradigm everywhere.
    • Building full systems where a spreadsheet/ETL + CSV export would suffice (though some caution that spreadsheets become fragile at scale).

Readability and Simplicity Debates

  • Strong debate over what “readable” means and for whom; readability seen as audience‑dependent but not meaningless.
  • Some argue function length is a poor proxy; others say long functions harm comprehension and testability.
  • Many converge on: readable code minimizes cognitive load, hides incidental complexity, and is easy for a typical mid-level engineer on the team to change.

Ego, Collaboration, and Hiring

  • Bragging and “lecturing on taste” are seen as red flags; humility and empathy for future maintainers are praised.
  • “It depends” and the ability to explain tradeoffs are viewed as signals of maturity.
  • Using “taste” as a hiring filter is seen as risky: it can become a justification for hiring only like‑minded people instead of assessing concrete skills and behaviors.