What is "Good Taste" in Software Engineering? Technical taste differs from technical skill. You can be technically strong but have bad taste, or technically weak but possess good taste. Just as you can appreciate good food without being a chef, you can recognize what software you like before you can build it. While technical ability comes from study and practice, good taste develops more mysteriously. --- Indicators of Software Taste What kinds of code do you find visually appealing or unattractive? Which design decisions feel genuinely satisfying vs. merely acceptable? Which software problems preoccupy you beyond work, and which do you dismiss? Taste is the ability to adopt engineering values that fit your current project. --- Why Taste Is Different from Skill Good or bad taste isn’t always about right or wrong. For example, preferring map and filter for iteration feels like a clear win due to purity and fewer bugs, but some languages (like Go) avoid these for principled reasons such as performance clarity. Others may prefer for loops for valid technical reasons. This reveals that disagreements often boil down to differences in values, shaped by personal experience rather than objective truth. No engineer experiences everything, so everyone relies on their own values. --- What Engineering Taste Actually Is Almost every software decision involves tradeoffs between competing engineering values. Rarely is one option strictly better; each has pros and cons. Maturity in engineering comes from flexibility—willingness to weigh both sides and pick tradeoffs suited for the particular context, not rigidly following one "best" way. Your engineering taste is your ranking of important engineering values, examples include: Resiliency: System remains functional and recovers from failures. Speed: Software performance relative to theoretical limits. Readability: Ease of understanding and onboarding. Correctness: Avoidance of invalid states, strong tests and types. Flexibility: Ease of changes and system extension. Portability: Independence from particular operational environments. Scalability: Ability to handle traffic increases gracefully. Development speed: Ease and speed of implementing changes by general engineers. Other values include elegance, modernity, cost, open-source use, etc. No engineer values all equally. Your taste reflects which you prioritize. --- How to Identify Bad Taste Bad taste happens when your preferred values do not fit the project’s needs. Engineers with bad taste may stubbornly push “best practice” approaches ill-suited for the context, causing issues like over-engineered systems that are hard for others to maintain. Bad taste mostly stems from inflexibility. Engineers rigidly attached to their preferences fail when moved to new projects with different requirements. Like a broken compass, a person with bad taste may navigate well in familiar territory but lose direction when conditions change. --- How to Identify Good Taste Good taste is harder to identify and develop. It’s about selecting the right values for the specific problem. Signs you have good taste: Projects you work on tend to succeed. You positively influence design decisions. You can observe patterns across diverse projects—not just fit to one. Developing good taste involves working on varied projects and focusing on flexibility. Avoid forming inflexible "right ways" of doing things too early. Good taste can be acquired slowly with experience but might also come early for prodigies, similar to other domains. --- If you liked this article, consider subscribing to email updates or sharing it on Hacker News.