- embedded systems (network switches, control systems)
- middleware (databases, message brokers)
- generic web services
Why I would use it:
- it has a lot of operational support tools to remotely monitor and debug a running production application built into the runtime.
- it's not necessarily the fastest language, but it's pretty fast for many things. The thing is, if you program in idiomatic erlang from the start, your application will naturally scale well without having to do anything, and will even handle overload gracefully.
- Erlang and Elixir are both well designed and expressive languages with few flaws and intelligently made tradeoffs. It's an enjoyable experience.
Erlang is really good for programming highly-scalable and fault tolerant distributed systems. It was designed by Ericsson (large Telco manufacturer from Sweden) for running on Telco equipment that has extremely stringent uptime and availability requirements.
For Elixir, I really like it for webapps and services.
- Ecto (data mapping) is fantastic, really glad they separated the SQL part
- Oban is fantastic (job processing)
- Liveview is really good. (frontend framework that uses websockets to build realtime apps that doesn't require writing JS (uses JS under the hood though)).
I'm working on iot cloud to which you can connect millions of devices (to single server) and it's very easily extensible to different device protocols (we make a driver for each device to expose all of them in unified way). Erlang is perfect here, because it can easily support lots of connections with low latency and you don't need to restart anything when you make changes, which makes development much easier.