What does it mean for software to be good? I have a note in my GTD system to write an essay about this, but I don't think I'll have the time. Instead, a few random thoughts, from my software developer point of view:

* easy to make change3s: bug fixes, new features, etc
* works well enough, and easy enough to use for its purpose
* has a test suite that developers can trust
* open source
* sufficient developers/maintainers to keep it working

What's on your list?

@liw

In the interface of the nuts&bolts database I made for my workshop I can use plus and minus in the quantity fields, so I don't have to rely on external calculations, but I don't know how to synthesize this feature in a single line.

@liw Has a clear purpose. And that purpose is documented.
@liw
I would add that if the software touches files or networks, it should strive for collaboration / interoperability when at all possible. That can be achieved by using existing open formats and standards, or lacking that, publish your own.

@liw hmm - some others:

- stable/predictable/boring: once it is reasonably mature, does not tend to make large breaking changes at interface boundaries

- welcomes newcomers & rewards long-term familiarity, balances the tension between these things well

- documented in a way sufficient to its use

- a fluid, pleasant interface. care in design.

- the little niceties: man pages, attention to CLI conventions, good scrollbars

- doesn't try to lock the user in (to format, vendor, etc.)

@brennen @liw In my experience the dividing line between the first 90% and the second 90% of the work required for a program that I wouldn't be ashamed to show to other people tends to lie between "this works on my computers for me" and "I'm confident this will work for anyone in the program's target audience"
@liw sensible default settings that enable it to run for a long time without operators attention - for log files, that could mean "errors only" by default, not "verbose". For databases or "stuff" that is written/stored, that could mean defaults that clean up no longer used "stuff" such as cache or intermediate files so that space used does not just grow until the alarm goes off

@liw Updates don't break existing workflows.

I can adapt to many quirks. It's when they change that annoyance happens.

For anything that's supposed to be used in scripts, that includes log messages.

A dry-run mode to check that it still all works as a consumer.