I feel like too many software products that we all use on a daily basis don’t care enough about their user experience and the problems they were supposed to solve. For whatever reason, too many programs suffer from bugs and design mistakes that persist and even grow over many years. I believe it’s possible to change that, and I strive to do that daily.
Here are some important characteristics that define good software in my eyes:
There are many great examples for software that already adhere to most of these criteria, especially in the FOSS community. Sadly, much of the software we depend on for daily use, and especially for critical infrastructure, doesn’t. Examples for important software that doesn’t adhere to these principles:
I could get into great detail about the reasons for why each and every one of those made it into the list, but I feel like they are glaringly obvious and everyone of us has had more than enough problems with those kinds of software. Feel free to challenge me to write detailed essays on specific problems of specific products if you care about it that much /s.
I could also go into great detail about positive examples, and I might actually do that some time soon, but that would be another blog post and I might even link to it here. For now, let’s continue.
Some more concrete scenarios that describe working with and using good software might be:
I can easily go on about what using and developing good software looks like. But I also want to emphasize what it feels like. It’s a feeling of ultimate joy, of getting in touch with the positive side of human history, of thousands of people working together to make something work properly. It’s a gift that keeps on giving, because yes, while it might require lengthy setup, careful design and configuration at first, it will just work from then on and not get in your way again.
I think every developer and software user who doesn’t have as strong of a fondness for good software as I do, may never have experienced this wonderful feeling of working with it. I hope you, dear reader, know what it feels like and if not, let’s keep working for a world that makes this possible for everyone to experience.
You can even go the extra mile and try to evolve what should define good software even beyond what most FOSS projects tend to do. One idea that I regularly rediscover is the need to transparently define all supported use cases and create documentation based on that.
For example, if the docs for the program rclone wouldn’t just explain how to use the bisync
command, but rather talk about how to use it exactly like Dropbox. That would make them realise that they still have to implement missing functionality to even compete with the Dropbox use case. Sure, the rclone maintainers don’t have a unified opinion on whether they should compete with that at all, but that is certainly a use case which thousands of people coming to rclone have. And it would help a great deal for rclone to make transparent that they are aware of this use case and not supporting it (yet).
So, if you feel like you can get behind most of the ideas laid out here and The Quest to Make Software Better™, I’m always happy to see people joining in on the cause. Feel free to hit me up about a project you’d like some support on, or any thoughts on how to make good software. I’ll be happy to hear from you.
For now, farewell traveler and DON’T PANIC.