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
- start small, maybe just a simple Phoenix (Rails-like) monolith app.
- then extracting Contexts and exploring your app's boundaries (with enough guidance from the community)
- 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
- 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).