We have a bean-to-cup coffee machine at work: press a button and it grinds the beans, heats the water and brews a decent cup of coffee in a minute. If something goes wrong it gives up and displays a message telling you what to do, “Fill water tank”, “Empty grounds draw” etc.
These messages are useful, they let me fix the problem and start again, but they are not helpful.
Helpful is warning me there isn’t enough water before I start.
Telling me that my 10GB download has failed because I’ve run out of space is useful, but telling me I don’t have enough space to begin with would be helpful.
Telling me there is a problem with my network connection is useful, helpful is diagnosing where the problem is and suggesting solutions.
Helpful software doesn’t have to cost much more to build, it just requires empathy and understanding for your users, and a willingness to go just that little bit further.
Useful is the easy route. Helpful requires more work and thought, but the difference is between a user who appreciates what your software does and one who appreciates the software itself.