https://medium.com/@niranjanky14/best-practices-of-error-handling-in-software-development-3220b1a1822a