You probably don't need all those services.
Real-time features, background jobs, caching, pub/sub, ML inference — Elixir and Phoenix handle it all without bolting on extra infrastructure.
The Gist
The premise is simple: Elixir isn't just another programming language — it's a platform. Built on the Erlang VM (BEAM), battle-tested across 37+ years of telecom-grade production use, Elixir gives you concurrency, fault tolerance, distributed computing, and real-time capabilities out of the box. Most teams are running too many services and too many languages. It's all premature complexity. More operational overhead, more deployment pipelines, more monitoring dashboards, higher cloud bills, and longer debugging sessions at 3 AM.
The Typical Pattern
You need real-time updates, so you add a WebSocket server. Background jobs? Spin up Redis and Sidekiq. Pub/sub? Another Redis instance. Caching? More Redis. You want to scale horizontally? Now you need Kubernetes. Message queues? Bolt on RabbitMQ or Kafka. ML inference? Fire up a Python sidecar. Before long, your "simple" application is a distributed system of seven services written in three languages, each with its own deployment, failure modes, and 3 AM pages when they stop talking to each other.
The "Modern" Stack
Multiple services, languages, and failure modes
With Elixir + Phoenix
One language. One runtime. Everything built in.
Small Teams, Big Results
WhatsApp served 900 million users with just 50 engineers on Erlang/BEAM — the same runtime Elixir runs on. Discord handles millions of concurrent WebSocket connections with Elixir. These aren't edge cases — they're proof that the BEAM eliminates entire categories of infrastructure that other stacks need bolted on.
Jose Valim, Elixir's creator, describes the philosophy as "removing the problem altogether instead of solving the problem." Phoenix doesn't have a real-time add-on because real-time is baked into the runtime. You don't need a separate caching layer because every process can hold state. You don't need Kubernetes for horizontal scaling because the BEAM was designed for distributed computing from day one.
"But Can It Really Do Everything?"
No technology does everything perfectly. But Elixir comes remarkably close to a full-stack platform. With LiveView, you build rich, interactive UIs without writing JavaScript. With Broadway, you process data pipelines at scale. With Bumblebee, you run ML models natively. And the language itself scores 97.5% solve rate across 30+ AI models — the highest of any language tested — making it the ideal choice for AI-assisted development.
Maybe Elixir Is All You Need
Before reaching for another service, see if Elixir already has you covered:
| You need... | You reach for... | But Elixir has... |
|---|---|---|
| Real-time UI | React + WebSockets, Pusher | Phoenix LiveView, Channels |
| Background jobs | Redis + Sidekiq, Celery | Oban, GenServer, Task |
| Caching | Redis, Memcached | ETS, Cachex, Nebulex |
| Pub/sub | Redis Pub/Sub, Pusher | Phoenix PubSub (built-in) |
| Message queues | RabbitMQ, Kafka | GenStage, Broadway |
| ML / AI inference | Python microservice | Nx, Bumblebee, Scholar |
| Scheduled tasks | Cron, Sidekiq Scheduler | Oban Cron, Quantum |
| Data pipelines | Apache Spark, Airflow | Broadway, Flow, GenStage |
| Embedded / IoT | C/C++, MicroPython | Nerves |
| Clustering / distribution | Kubernetes, service mesh | BEAM distribution, libcluster |
When You Actually Need Something Else
This isn't about dogma. Sometimes you genuinely need a specialized tool or a different language. But the bar should be high: only after pushing Elixir to its limits and documenting why it was insufficient. Until then, every service you add is a bet that the benefit outweighs years of maintenance, monitoring, and cross-language debugging.
37+
Years of BEAM in production
97.5%
AI code solve rate — highest of any language
50
Engineers at WhatsApp serving 900M users
Elixir + Phoenix