Maxims of good software
November 2025
1. Opportunity cost is real
2. Every user is ego-centric
3. Users think in derivative terms
4. Most problems go unnoticed
5. Environments steer results
Summary
- Opportunity cost is real
→ let others build you most of your software - Every user is ego-centric
→ let users augment software to their specific needs - Users think in derivative terms
→ only sample problems from your users - Most problems go unnoticed
→ optimists need to observe the problems that most people ignore - Environments steer results
→ place users in a narrow digital environment
Implications
Notes
Timeless also means independent of platforms and tooling for developers.
Even the best design engineers are best off using off-the-shelf solutions. "I could build it better" is not a sufficient reason to spend $1000s of potential work hours building a slightly better todo app. Opportunity cost is real.
"Others" means humans and AI systems.
Naturally, only do so in a safe manner, giving access to select functions and endpoints that are already accessible client-side. If a kid can invent their own toys and make larger sandcastles than ever, your sandbox needs higher walls than ever.
Laziness can also be subsituted for "energy efficient" in the biological sense, depending on how you frame it.
Scope ambiguity works well here—you can read it both ways. My main intention was, only listen to your users' problems, unless you want to hear myopic solutions that are purely changes to existing software. After all, they're spending their time, resources, and effort elsewhere, so they have little to no capacity for first principles thinking in your chosen problem space.
Update (Nov 25, 2025): I've caught myself trying to be a little too smart here. You obviously want to listen to non-users too, especially if they fit your idea of an ideal user. My point was simply, when your users talk, listen to their problems rather than their proposed solutions. I never intended to say ignore the non-users. Unless you're competing with something I've built ;)
As for first principles thinking, I discovered impact mapping a few years ago. I think it's a brilliant planning technique in how it lays out the connections between assumptions and deliverables. If an assumption turns out to be false, you can visually trace the assumption down the tree to every now-invalidated deliverable.
Think about how often yet forgettably you've felt problems in your everyday life. Here are some examples that come to mind:
- Thinking it's a pull door based on the handle but it's actually a push door.
- Waving your hand under an automatic tap and the initial pressure is so high that water sprays over you, enough to make it look like you arrived late to the bathroom.
- Pressing stop on an empty microwave with "00:05" flashing because the last person who used it took their food out five seconds early.
They're all problems that are frequent enough to be design issues rather than user issues. But I currently lack the expertise in door handles, plumbing, and microwave design to do anything about such problems. So the best thing I can do is to let them go, at least for now. I'll stay an optimist for problems that can be solved with software.
If the operating system is the world, then applications are the environments. But even worlds are different meta-environments that set the tone for applications it runs: we operate differently when running the same apps on a watch versus a phone versus a tablet versus a laptop versus a desktop versus a headset and so on. This is analogous to living in different places in the physical world.
Far more than physical environments, well-designed software environments are an exercise in psychology, specifically through user experience design.