refactor error handling into strategies