An error is an exceptional conditions that breaks the normal flow
A good error message identifies:
Doc:
Error propagation is when an error that occurs in a block of code is propagated to its caller. This is an exception mechanism.
This is easy in a single thread application but really difficult in multi-thread.