Because of the ability to run multiple Erlang applications side-by-side in the same process and because of metaprogramming awesomeness, one of the fancy things you can do is IEX.pry(after you require IEx in the module) , which starts a shell at that current location in the code, so you can debug the scope you are in.
The cool thing about IO.inspect by the way is that you can plug it in everywhere in your pipelines without altering the result:
(1..10)
|> IO.inspect
|> Enum.map(fn x -> x * x end)
|> IO.inspect
|> Enum.sum
|> IO.inspect






















