TL;DR. Only use exceptions for truly exceptional cases. Try OK. Hello, my friend Let us start with some simple functionality. Given the ID for a user, in this case an integer, return a greeting for that user. The first iteration of a greet function could look something like this: @spec greet(integer) :: String.t() def greet(user_id) do {:ok, user} = fetch_user(user_id) {:ok, first_name} = first_na