clean code error handling