Dave’s tenets of software engineering
Here are some tenets of software engineering that I’ve gathered through the years. I’ll probably add to this list over time as I think of more.
Above all, empathy
All software that stand the test of time come from a place of empathy: it serves some human being well in one form or another. Your best code arises when you have a picture of its user in mind; it could be a person on their phone, a developer using your library, someone trying to maintain it after you’ve moved on. Empathy gives you the fundamental value system to help you make your decisions.
Develop a sense of suck
The corollary of having empathy is developing an instinct for spotting things that suck. It’s hard to define what suck is, but you know it when you see it: a hostile UI, an awkward API, “the smartest newbie” kind of code that tries to be super clever, etc.
Resist designs that suck. Push back hard if you’re on a team. Designs that suck are the embodiment of technical debt. Learn to smell the suck before it’s integrated into your code base.
But I caution: don’t over-rely on detecting suck, lest you turn into a curmudgeon. Remember, empathy and the sense of suck are two sides of the same coin. You mustn’t neglect one in favor of the other.