What Actually Is This Thing?
Erlang came from Swedish telecom engineers in the '80s who were pissed off that their phone switches kept dying. When a telecom switch goes down, you lose millions per minute, so they said "fuck this" and built a language where things are allowed to crash without bringing down the entire system.
The syntax looks like someone took C and ran it through a blender with Prolog. I spent 3 weeks cursing at semicolons vs periods - they're backwards from literally every other language. You end clauses with semicolons and functions with periods, which feels wrong until your muscle memory finally gives up fighting it.
But here's the kicker: spawning an Erlang process costs less than creating an object in Java. No joke - 2.6KB of RAM and you get your own isolated universe with a mailbox.
The Actor Model (But Actually Useful)
Each process is completely isolated - it has its own memory heap, stack, and message queue. When one crashes, it doesn't take down anything else. I learned this the hard way when I spawned way too many processes on my MacBook (maybe 2 million?) and everything kept running fine. Try that with threads and see how fast your OS starts weeping.
The BEAM VM can theoretically handle millions of processes, but in practice you'll hit other limits first. I've run systems with 100k processes without breaking a sweat - the scheduler is fucking magical at keeping everything fair.
Forget those synthetic benchmarks claiming millions of messages per second. Real production systems with actual payloads? Maybe 20-40k messages/second if you're lucky and everything's optimized. Network I/O will be your bottleneck way before the VM gives up.
Who's Actually Using This?
OTP 28.0 dropped in May 2025 with some decent improvements. They've been pretty consistent with yearly releases, which is nice when you're not dealing with the JavaScript ecosystem's "new framework every Tuesday" bullshit.
Here's who's actually betting their infrastructure on this weird functional language:
- WhatsApp: 32 engineers handled 450 million users before Facebook bought them for $19 billion. That's roughly 14 million users per engineer. Try scaling that with Node.js.
- Discord: Actually switched from Go to Rust because their garbage collector was causing random latency spikes during message fanout. They didn't go with Erlang/Elixir, but the problem they solved is exactly what BEAM languages excel at.
- Goldman Sachs: Uses it for high-frequency trading where a millisecond delay costs millions. If Goldman trusts it with their money, maybe it's not just academic masturbation.
- CouchDB: The entire database is written in Erlang because they needed something that doesn't shit itself when things go wrong.
The "Let It Crash" Philosophy (Sounds Insane, Actually Works)
Most languages teach you to catch every exception and handle it gracefully. Erlang says "fuck that" and just lets things crash. Sounds stupid until you realize that process isolation means one crashed process doesn't take down everything else.
When a process dies, its supervisor restarts it in milliseconds. I've seen production systems restart 10,000 processes without dropping a single user connection. Try that with your REST API built on Express.
Hot code reloading is pure magic when it works. You can literally update running production code without stopping the system. But I once accidentally updated the wrong module and all user sessions got corrupted because the state format changed mid-flight. The docs say it's "safe" but always test that shit on staging first.