As they say, shit happens.
Even in software.
And when things go haywire, we want to communicate with the users in a helpful manner. Ideally, an error message:
- Informs the user a bit about what went wrong (if known)
- Instructs the user how he might fix the problem on his own (if possible)
- Suggests what the user should do if further assistance is required