Immutability, which makes code easier to understand, to debug and to trace the flow
Power of Erlang under the hood for free - lightweight processes, great communication system, whole OTP to use
Flexible and powerful syntax - easy to code, but enables you to make great things with macros - world without breaks, long loops, spaghetti code and methods “all in one”
Doctest - test your code with documentation, sound awesome, works even better
Language improvements and Jose’s dedication - it’s different subject at all, but man! Such amount of work.
It has all the benefits of functional programming paradigm.
Then, Elixir uses only plain functions. No type classes, monads, and other increasingly complex abstractions in other functional languages that are nice but liable to go overboard.
Its pattern matching and OTP conventions lead developers to always break code into smaller parts, keeping complexity low and greatly delaying that eventual explosion of complexity.
I can’t really explain it other than it’s a well designed language. I’ll be changing careers if I can’t write my solutions in Elixir, Clojure, or OCaml full-time in the near future.