Over-Bytes
Sympathetic Engineering: engineering with the awareness and care that turns good software into great software. Seven key sympathies every developer should have in their toolkit.
Listen to the article discussed in podcast form:
When most people hear “sympathy,” they probably picture someone comforting a friend or sending a “get well soon” card. Not exactly what comes to mind when you think of your typical software engineer, right? Engineers are usually unfairly painted as the ones who can barely keep up with the emotional demands of their own code—let alone someone else’s.
But here’s the thing: sympathy is exactly what makes an engineer great. Not the kind where you offer a warm hug after a bug in takes down your production hosts, or that commiserates with the state of the tech job market, but the kind that emphasizes deep understanding of the systems you’re working with or within—whether it’s the algorithms, the hardware, the users, current or future colleagues, or even the data you’re processing. This is what I call sympathetic engineering.
Sympathetic Engineering: engineering with the awareness and care that turns good software into great software.
In this article, we’ll explore the seven key sympathies every developer should have in their toolkit.
In software development, success often hinges on more than just technical skills. This may sound like soft skills stealthily sneaking into hard engineering, but it’s the secret weapon behind the most innovative and efficient software. The best engineers don’t just code in a silo; they cultivate the right “sympathies” to design and build systems that are efficient, user-friendly, and future-proof; this is the essence of sympathetic engineering.
These sympathies are not listed in any particular order. Why? Well, the software engineering landscape is vast. The depth and breadth of sympathies required by a user experience engineer will differ from an embedded engineer, or a web developer. Cultivating them all (broad understanding - sympathy), and specializing in at least one or two (deep understanding - empathy) should be a goal for any modern software engineer that wants to stay relevant and excel. Having a depth of understanding will naturally enable you to excel in roles and environments that benefit from those sympathies the most.
User Sympathy
Defined: Designing with empathy for user needs and requirements, accessibility, and usability.
If you don’t care about your users you will not build a successful product. I repeat: if you don’t care about your users, you will not build a successful product!
Think of user sympathy as the art of stepping into someone else’s shoes, combined with the science of making technology invisible. Good software understands and anticipates its users’ pain points and strives to make their lives easier. It anticipates edge cases, ensures inclusivity, and feels natural to interact with.
Consider the way the best products ‘delight’ users with features they didn’t know they needed, or how accessibility unlocks your software for a broader audience. Just as designers sweat the finer details of form and function, empathetic developers refine every aspect of user interaction—because the best software doesn’t just work; it works for everyone.
Mathematical Sympathy
Defined: Understanding the foundations of algorithms, data structures, and computational complexity.
Mathematical sympathy is about developing an intuitive feel for the building blocks of computation. It’s the ability to navigate trade-offs—like when to use brute force versus a clever algorithm—and knowing that sometimes the simplest approach is the most effective. (See: KISS)
This isn’t just about memorizing Big-O complexities, implementing algorithms from scratch, or solving coding puzzles; it’s about recognizing when a problem demands precise calculations, probabilistic models, or geometric reasoning. A developer with mathematical sympathy can break down complex scenarios into solvable problems, balancing efficiency with accuracy.
It also comes into play when reasoning about edge cases, designing robust systems, machine-learning pipelines, real-time systems, and cryptographic protocols or debugging strange behavior. In these moments, mathematical sympathy brings clarity and creativity.
Mechanical Sympathy
Defined: Understanding the workings of the underlying hardware and optimizing for it.
Sir Jackie Stewart, one of the most successful F1 drivers of his era and is credited with the quote “You don’t have to be an engineer to be a racing driver, but you do have to have mechanical sympathy”.
I’ve always been a big fan of F1. F1 is hyper-focused on performance and requires a deep understanding between the driver, race engineers, and their car. They stress so many aspects from the driving lines, to the driver’s body weight, to tire management, to fuel management, timing, and more to stress gains of seconds and less.
Similarly, in areas where resources are constrained or performance is paramount, the software engineer who understands the way their hardware works, from cache to CPU and beyond, who has mechanical sympathy and can apply computational thinking will excel in building highly performant code.
Performance-aware game programmers often stress the milliseconds and less, trading platform developers stress the nanoseconds. Getting there often requires putting aside the abstractions that work well in other scenarios e.g. think object-oriented programming vs data-oriented (cache friendly) design.
Team Sympathy
Defined: Crafting code and processes that make collaboration seamless and codebases maintainable.
Team sympathy is about recognizing that software development is a collaborative effort, not a solo performance. It’s about writing code that others can understand, extending a constructive helping hand during code reviews, and fostering an environment where questions and feedback are welcomed.
This means prioritizing empathy and kindness over ego—avoiding clever but cryptic solutions, communicating openly, and treating your teammates with respect. It also requires team members not sit back on their current level of experience and embrace continuous learning and asks managers to inspire and empower.
Great teams aren’t just made of skilled individuals; they’re built on trust, shared understanding, and a commitment to leaving the codebase (and each other) better than they found it (See: The Boy Scout Rule).
Teams that value sympathy for their fellow developers create resilient software and avoid the worst pitfalls of technical debt.
Domain Sympathy
Defined: Deeply understanding the problem space or industry to create software that meets real-world needs.
Just as a mechanic wouldn’t fix a car without understanding how the engine works; software engineers can’t solve problems effectively without understanding the domain they’re working in. Much as the best product owners are often also technical, the best product engineers engage deeply with their domain.
Domain sympathy is about engaging deeply with the context—whether it’s finance, healthcare, or gaming—and translating that knowledge into meaningful software. Understanding the whys and not just the whats is the shortcut to building the right software.
This includes asking questions, challenging assumptions, and collaborating with subject matter experts and users. The best software does more than just automate or calculate; it embodies the nuances of the domain, solving problems in ways that feel intuitive and natural to those who inhabit that world.
Environmental Sympathy
Defined: Adapting to the development ecosystem, including tools, platforms, and frameworks.
An F1 driver doesn’t drive the same way on every track; each track presents a new challenge and they must adapt to conditions like weather, turns, and straights. Similarly, software developers must adapt to the nuances of their chosen stack or platform or engineering culture.
Environmental sympathy means understanding the tools, frameworks, and infrastructure that surround your software.
Whether it’s optimizing a React app to play nicely with the browser, leveraging cloud-native paradigms in Kubernetes without costs spiraling out of control, working within the constraints of an embedded device, or writing idiomatic code in a particular language or framework, mastering your environment helps you sidestep drawbacks and exploit strengths. The most effective engineers think not just about the code but also about where and how that code will run.
Data Sympathy
Defined: Appreciating the nature and flow of data to optimize storage, processing, and analysis.
Data is the lifeblood of modern software, (so much so that I’ve started writing a series about it in the context of mechanical sympathy). Treating it with care requires data sympathy. This involves understanding not only the volume and shape of your data but also its velocity, variety, and perhaps most importantly, its value.
How do you make data available to users before it loses its value? How do you organize data to surface valuable insights? How do you design a schema to minimize redundancy? How do you process data in a way that scales with user demand? How do you preserve privacy and security in a world that demands compliance?
Answering these questions isn’t just about algorithms—it’s about respecting data as a precious resource and crafting solutions that handle it with the respect it deserves.
In software development, sympathy is more than a mindset—it’s a responsibility. With it we elevate both the quality of our software and the human experience surrounding it. These principles aren’t just optional extras; they’re the foundations of effective engineering.
As you write, design, or build, ask yourself: how can I apply each of these sympathies to make my work more thoughtful, efficient, and human-centered?
The difference between good software and great software lies in the depth of our empathy.
Disclaimer:
Any views and opinions expressed in this blog are based on my personal experiences and knowledge acquired throughout my career. They do not necessarily reflect the views of or experiences at my current or past employers
Next Steps
- Put these sympathies to work in your career. Get excited and deep dive to find out more.
- Share your own favorite learning resources, blogs, or book recommendations for sympathetic engineering in the comments.
- Follow my blog (and others) for future updates on my engineering exploits and professional / personal development tips.
- Connect on social media channels @briancorbin.xyz.
Comments
Reply on Bluesky here to join the conversation.