What is “good” software?
Good software does the following:
- Solves a problem - this can include any problem in business or your life, including recreational activities.
- Is sustainable - It continues to work over time. The economics of creating and maintaining it are in balance with the fees charged for the software.
- Is maintainable - It can be reasonably changed in order to adapt to changes in its ecosystems.
- Is supported - The customers of the software can find the help they need when using it.
- Is enjoyable - There needs to be an positive experience not only for the people who use it, but for the people who build, maintain, and support it.
You will note that my list of criteria for good software says nothing about the quality of the code or other technology used to build it. That is a deliberate omission. Good engineering does matter - it supports the points above. I exclude it as its own criteria to force the perspective that software engineering is a tool we use to build software, but is not a goal for its own sake.
Because this can be a contentious point, I want to use the tried-and-true analogy of comparing software dev to a house. Buying a house, in this case. If you saw a house that you loved and wanted to live in, but needed repairs, you would buy the house and fix the problems. But if you saw a house in perfect condition that you did not want to live in, you would not buy that hosue no matter how perfect its craftsmanship may be.
Software is the same - the craftsmanship does matter. But it is a secondary factor, not the primary goal. It makes it a sustainable place to enjoy spending time, only when and if everything already matches your needs.
Another deliberate exclusion from that list is AI. For similar reasons, but with how new AI is at the time I wrtie this, I want to comment on where it fits in good software: Anywhere. AI is a tool, just like code. If you can solve a problem with AI, do so. But do it because it is the right tool for the job. Don't add AI just because it is the latest innovation. That innovation must improve one of the points in the list above. The creation of software is about the result of all the combined elements, not the usage of any specific tool.