errors should contain * name of the library so that user will know where to complain * module name, file name, ... * reason to throw and solution if available * (maybe) customized error name or code