When I make software, this is my sorted list of priorities:
- Software should be useful to the end user and strive to become software you can love.
- Software should be correct, as malfunctioning software detracts from the utility users can derive from it.
- Software should be maintainable and efficient, in order to avoid wasting human and computational resources when trying to get more utility out of it.
It doesn’t matter that your project has no bugs if it’s a rugpull, or you’re otherwise working on user-hostile software.
It doesn’t matter that the language you use is memory-safe, if you didn’t design for correctness or have no process that will eventually lead you to fixing all bugs.
It doesn’t matter that your software is a beautiful canopy of abstractions, if it’s unbearably slow or nobody is able to maintain it, let alone add new features.
Sometimes I run out of steam, sometimes I go down the wrong path, and some other times I deliberately take detours, but nobody can trick me into mistaking lesser stars for my true destination: I do care about my own developer experience, but only in the exact measure that it helps me deliver more software you can love that I and others can enjoy.
The ultimate goal is to maximize utility for the end user; everything else exists in service of it, and that’s my north star for making software.