Elixir/Erlang provide a great way to develop incrementally

  • BEAM excels due the fact that it offers the foundational concepts needed for any server-side system, baked directly into the runtime
    • in general with a BEAM powered solution there's less need to step outside the main language and run multiple OS processes
  • BEAM offers a proper foundation for building arbitrary complex system with the least amount of technical complexity.
  • Elixir is a great tool which allows you to start simple, move forward at a steady pace, and have the technology which can take you a very long way and help you deal with complex problems at a very large scale, without forcing you to step outside and use a bunch of 3rd party products, but still allowing you to interact with such tools and even write parts of your system in other languages.

-- from sasajuric comments on Is Elixir really worth it? (You can also watch ElixirDaze 2017- Solid Ground by Saša Juric - YouTube)

This is one of the main reasons why I believe Elixir is a great language for web development.

It allows developers to

  1. start small, maybe just a simple Phoenix (Rails-like) monolith app.
  2. then extracting Contexts and exploring your app's boundaries (with enough guidance from the community)
  3. and if you have scaling problems, you can easily turn a Context into an OTP app and transform your monolith app to an umbrella app
  4. finally you can deploy this umbrella app to a distributed system so that they can scale differently.

Note that these steps are all done in purely Elixir/Erlang, and they are just like some simple refactoring processes which can take you to a pretty decent result.

You can obviously do all these things with Docker and all other languages, but it's much harder to extract logic from an old monolith app to a microservice (especially if you are rewriting it in another language).