How Erlang Powers WhatsApp-Scale Messaging Systems

How Erlang Powers WhatsApp-Scale Messaging Systems

When Facebook paid $19 billion for WhatsApp in 2014, the entire engineering team fit in a large conference room. Fifty engineers were running a messaging service for 450 million people, moving something close to 50 billion messages a day, off commodity servers that were nowhere near as exotic as the traffic numbers suggested. The reason a team that small could carry that much weight was not luck or a hiring miracle. It was a language called Erlang, built by Ericsson to run telephone switches that were not allowed to go down.

That story still gets told in conference talks and interview prep guides, but it raises an obvious question for anyone building a messaging product, a real time notification system, or anything that needs to hold millions of open connections at once: is Erlang still a serious option, or is it a museum piece that one famous acquisition happened to make famous? Looking at where the language and its ecosystem stand today, the honest answer is that Erlang in 2027 is doing quiet, unglamorous, extremely reliable work at companies most developers have never heard mention it.

This piece walks through what actually makes Erlang suited to WhatsApp scale messaging, how the language has moved since that 2014 deal, and what current Erlang development trends 2027 look like for anyone deciding whether to build on it today.

A Short Timeline: From Telephone Switches to Chat Apps

Erlang's path to WhatsApp did not happen overnight, and seeing the milestones in order helps explain why the language was mature and battle tested by the time a small chat startup needed it:

Year

Milestone

1986

Erlang created inside Ericsson for telephone switching software

1998

Ericsson open sources Erlang after roughly a decade of internal telecom use

2009

WhatsApp founded by Jan Koum and Brian Acton, built on Erlang from the start

2011

Jose Valim creates Elixir, adding new syntax and tooling on top of the same BEAM

2014

Facebook acquires WhatsApp for $19 billion; the company runs on about 50 engineers

2021

OTP 24 adds the BeamAsm just in time compiler, improving raw performance

2026

OTP 28 ships priority messaging, a software bill of materials, and ongoing security hardening

What Erlang Actually Is

Erlang was not built for chat apps or social networks. Ericsson created it in 1986 for telephone exchange software, a domain with a strict requirement: calls cannot silently drop, switches cannot crash for hours, and one bad line of code cannot bring down a phone network serving an entire region. That requirement shaped everything about the language.

Erlang is a functional language, meaning data does not change in place once created. It ships with a runtime called the BEAM, short for Bogdan and Bjorn's Erlang Abstract Machine, and a standard library called OTP, short for Open Telecom Platform, that bundles the patterns telecom engineers used over and over: supervision, distribution, hot upgrades, and a process model that has nothing to do with operating system threads.

Ericsson open sourced Erlang in 1998 after nearly ten years of internal use, mostly inside switches handling millions of calls without anyone outside the company noticing. That quiet, boring reliability record is exactly what drew WhatsApp's founders in a decade later.

Why WhatsApp Bet on Erlang

WhatsApp was founded in 2009 by Jan Koum and Brian Acton, both former Yahoo engineers. From day one, the product had one job: deliver short messages to phones over unreliable mobile networks, fast, and never lose them. That is a concurrency problem before it is anything else. Every user who opens the app holds a connection open to a server, sometimes for hours, and the server has to track presence, buffer undelivered messages, and hand off traffic the moment a phone reconnects after switching from WiFi to a mobile network.

Koum chose Erlang early, and he was blunt about the reason in later interviews: it was the right tool for a problem that was fundamentally about holding millions of connections open at once with predictable behavior. At the time, the alternative was writing a custom event loop in C or Java using operating system threads, and accepting that each thread would cost a megabyte or more of memory before it did any real work. Erlang processes, by contrast, start at a few hundred bytes and grow only as needed.

The choice paid off in a way that is easy to state and hard to reproduce. By 2014, a single WhatsApp server was holding roughly 2 million concurrent connections. The company ran with about 50 engineers across iOS, Android, servers, and operations while serving 450 million monthly users, a ratio that later estimates put somewhere between 9 million and 40 million users per engineer as the user base kept climbing toward 2 billion. No team that size stays that small by writing more code. It stays small by writing less code that does more, and that is what the platform allowed.

The Process Model: One Connection, One Lightweight Process

The single biggest reason Erlang fits messaging systems is its approach to concurrency. In most languages, handling 100,000 simultaneous connections means managing operating system threads, a thread pool, or an event loop with callbacks scattered across the codebase. Erlang sidesteps all three. Every unit of work, including every single user connection, runs as its own lightweight process inside the BEAM. These are not operating system threads. They are managed entirely by the Erlang runtime, they do not share memory with each other, and they communicate only by sending messages.

That isolation is what makes the scale numbers possible. A WhatsApp connection could be represented as one process holding a small amount of state: who the user is, what they are subscribed to, what messages are queued. When a message arrives for that user, another process simply sends it a message. There is no shared data structure to lock, no risk that two threads corrupt the same memory at once, and no thread pool to size correctly under load.

Here is roughly how the numbers compare to the alternative most backend teams reach for by default:

Aspect

Erlang Process (BEAM)

OS Thread (typical Java or C++)

Starting memory footprint

About 300 bytes to 2 KB

512 KB to 1 MB, stack alone

Creation cost

Microseconds

Comparatively expensive, OS level call

Context switch

Handled by the BEAM scheduler in user space

Handled by the OS kernel

Shared memory between units

None, isolation by design

Shared by default, needs locks

Practical ceiling per machine

Millions

Typically thousands to tens of thousands

Crash behavior

Isolated, one process dying does not affect others

Can corrupt shared state or crash the whole process

The practical result of this design is what WhatsApp actually reported: about 2 million connections on a single server, on commodity hardware, well before most companies were thinking about that kind of density. The same pattern shows up elsewhere. Discord, which also runs on the BEAM through Elixir, has spoken publicly about handling millions of concurrent users through a similar process per connection model.

The BEAM Scheduler: How Millions of Processes Share a Few CPU Cores

Having millions of lightweight processes only helps if the runtime can actually run them fairly on a machine with, say, 32 or 64 CPU cores. This is where the BEAM scheduler does its work, and it is worth understanding because it explains why Erlang systems tend to stay responsive even under heavy load rather than degrading gradually the way many other runtimes do.

The BEAM runs one scheduler thread per CPU core by default, and each scheduler manages its own run queue of processes waiting for CPU time. Instead of letting one process run until it chooses to yield, the way cooperative systems do, the BEAM counts reductions, roughly one reduction per function call or similar unit of work, and preempts a process automatically once it has used its share. A process cannot hog a core by accident, and a runaway loop in one connection handler cannot starve the other 2 million connections on the same box of CPU time.

This preemptive, reduction counted scheduling is a big part of why WhatsApp could push a single server to 2 million connections and still keep latency predictable. The scheduler also moves processes between cores to balance load, and it handles garbage collection per process rather than pausing the entire runtime the way a global garbage collector does in many other languages. A large heap in one process does not freeze every other process on the machine while it gets cleaned up.

Let It Crash: Supervisor Trees and Fault Tolerance

Erlang's other defining idea is almost the opposite of how most languages teach error handling. Instead of wrapping every risky operation in a try and catch block and trying to anticipate every failure mode, Erlang encourages a philosophy summed up as let it crash. A process that hits an error it was not built to handle is simply allowed to die.

That sounds reckless until you see the second half of the design: supervisor trees. Every process in a well built Erlang system sits under a supervisor, a separate process whose only job is watching its children and deciding what to do when one dies. A supervisor can restart the failed process, restart a whole group of related processes, or escalate the failure upward if it cannot recover on its own. None of this requires the developer to predict every possible failure in advance. It requires only that failures stay contained to the smallest possible part of the system.

For a messaging platform, this maps directly onto real operational problems. If the process handling one user's connection hits a bug, maybe a malformed message, maybe a network hiccup it was not expecting, only that one process dies and restarts in a clean state. The other 2 million connections on that same server never notice. Compare that to a single threaded or shared memory system, where an unhandled exception in one request handler can take down the whole process, along with every other connection it was serving.

This is also the mechanism behind a question a lot of engineering teams ask directly: how Erlang is used for fault-tolerant concurrent systems in 2027 comes down almost entirely to this pattern, applied consistently at every layer of a system rather than kept as an occasional safety net.

Hot Code Swapping and Zero Downtime Updates

One more Erlang feature mattered enormously for a 50 person engineering team: hot code swapping. Erlang was built so a running system can load new code and switch over to it without dropping active processes or restarting the machine. For telecom switches, this made sense immediately. You cannot ask a phone company to hang up every active call in a region just to deploy a patch.

For WhatsApp, the same feature meant engineers could ship fixes and improvements without disconnecting users mid conversation, something that mattered a great deal at a company shipping to hundreds of millions of phones on inconsistent mobile networks. It also meant the operations burden of deployment did not scale linearly with the number of servers the way it does in systems that require rolling restarts or connection draining before every release.

Distribution, Storage, and Message Delivery

Concurrency inside one machine only solves part of the problem. WhatsApp also had to move messages between servers, across data centers, and eventually across a global user base. Erlang was built with distribution as a first class idea rather than a bolted on library. Nodes running the BEAM can form a cluster and send messages to processes on other machines using the same syntax used to talk to a process on the same machine, which keeps the mental model consistent even as the system grows.

WhatsApp paired this with Mnesia, Erlang's own distributed, in memory database, for the parts of the system that needed fast, replicated access to state such as presence and session data. Messages themselves were typically held only until delivery, then removed from the server rather than kept in a long term store, which kept the storage layer lean and matched the actual product requirement: get the message to the device, not archive it forever on a server WhatsApp had to pay for.

None of this was exotic engineering. It was closer to the opposite: a small set of well understood, battle tested pieces, Erlang processes, supervisor trees, Mnesia, a modified XMPP protocol served through ejabberd, combined carefully and tuned relentlessly at the operating system level, right down to FreeBSD kernel parameters for file descriptors and socket handling.

WhatsApp by the Numbers

It helps to see the growth in one place rather than scattered across separate claims:

Metric

Around 2014 (post acquisition)

Later public estimates

Monthly active users

450 million

Over 2 billion

Engineering team size

About 50

Grown substantially, exact count not published

Messages sent per day

About 50 billion

Over 100 billion

Connections per server

About 2 million

Similar order of magnitude, tuned further

Countries served

Dozens

180 plus

The team size grew after Facebook's acquisition, as any company serving billions of people eventually needs more hands for compliance, abuse prevention, payments, and regional features that have nothing to do with core message delivery. What did not change is the underlying architecture pattern: lightweight processes, supervision, and a small number of large, carefully tuned machines rather than a sprawling fleet managed by a large infrastructure team.

Erlang in 2027: Where the Language Stands Now

Erlang in 2027 is not the same project it was when WhatsApp adopted it in 2009, even though the core ideas have not moved. The language is maintained by the OTP team at Ericsson alongside an active open source community, and recent releases show a project being kept current rather than preserved as a museum piece.

Erlang and OTP 28, the major release carried through 2026, added priority message handling for processes, better compiler error messages that suggest likely fixes, and a formal software bill of materials for each release, a detail that matters more now that supply chain security is a standard procurement requirement for any language a serious company builds on. Patch releases through the year focused heavily on security fixes, including hardening around buffer handling in areas like SCTP chunk parsing, work that reflects Erlang's roots in telecom infrastructure where that kind of attack surface has always mattered.

An earlier release, OTP 24, added a just in time compiler known as BeamAsm, which gave the runtime a real performance jump on modern multi core hardware without asking developers to change how they write code. That single change mattered more for the ongoing health of Erlang in 2027 than almost anything else on this list, because it answered the most common objection long term Erlang users heard from newer teams: that the runtime was fast enough for concurrency but slow for raw computation.

Erlang Development Trends 2027

The clearest way to describe Erlang development trends 2027 is that the language itself has become a stable foundation while most of the new energy sits one layer up, in Elixir. Elixir, created by Jose Valim in 2011, runs on the same BEAM, keeps the same process model and supervisor trees, and adds a syntax closer to Ruby, along with the Phoenix web framework and its real time LiveView tooling. A large share of companies adopting BEAM technology today choose Elixir on top of Erlang rather than writing Erlang directly, and job market data reflects that shift.

Public salary and hiring data through 2026 puts senior Elixir engineers in the United States in a range from roughly $107,000 at early stage startups up to $250,000 at companies like Discord or Remote.com hiring specifically to architect distributed systems on the BEAM. Contract rates run between $80 and $120 an hour. The pool of engineers with deep OTP experience, meaning supervision trees, distributed clustering, and hot upgrades rather than just Phoenix web development, stays small relative to demand, which keeps compensation high for people who actually understand the runtime rather than just the syntax on top of it.

Job board data from outside the United States tells a similar story: a small, steady market rather than a shrinking one. UK postings citing Erlang or Elixir skills climbed year over year through the period leading into 2026, and reported median salaries for permanent roles requiring these skills sit well above the general market average, reflecting both scarcity and the seniority of the roles on offer.

UK Job Market Signal

Erlang

Elixir

Rank change year on year

Up 61 places

Up 61 places

Median annual salary (permanent roles)

Roughly 52,500 to 60,000 GBP

Roughly 61,250 GBP

75th percentile salary

Roughly 62,500 to 70,000 GBP

Roughly 71,250 GBP

Numbers like these point to a market that rewards depth over breadth. There are not many roles, but the roles that exist tend to pay well and go to engineers who have actually operated a BEAM system in production, not just read about the actor model. A short list of the kind of company still choosing this stack deliberately, and shaping Erlang development trends 2027 in the process:

•       Discord, for real time chat and voice infrastructure serving tens of millions of concurrent users

•       Klarna, for payment systems where a crash cannot be allowed to corrupt a transaction

•       The BBC, for services that need to absorb sudden traffic spikes around major news events

•       Remote.com, for a distributed HR and payroll platform that must stay correct across time zones and currencies

•       RabbitMQ, one of the most widely used message brokers in the industry, itself written in Erlang

None of these are companies that backed into the BEAM by accident. Each one evaluated alternatives and made a documented, deliberate choice, usually after running into the limits of thread based concurrency models somewhere else first.

How Erlang Is Used for Fault-Tolerant Concurrent Systems in 2027, Beyond Messaging

Messaging apps are the most famous example, but they are not the only place this pattern applies. Understanding how Erlang is used for fault-tolerant concurrent systems in 2027 means looking past WhatsApp to the industries that quietly depend on the same properties: telecom networks, financial systems, multiplayer games, and connected device fleets.

Telecom carriers still run Erlang in the switches and session border controllers it was originally built for. Ericsson's own network equipment, the reason the language exists at all, continues to rely on the same supervisor pattern to keep call routing available during hardware failures and software upgrades.

In fintech, the appeal is different but related. A payment system cannot silently lose a transaction or double charge a customer because one process crashed mid operation. Klarna has spoken publicly about choosing Erlang for exactly this reason, favoring a system that fails safely and recovers automatically over one that requires perfect exception handling in every code path.

Multiplayer gaming backends face the same connection density problem WhatsApp solved. Riot Games has reported handling millions of concurrent League of Legends chat connections using BEAM based infrastructure, and the reasoning matches WhatsApp's almost exactly: many long lived, lightweight connections that each need isolated state and fast message passing.

Connected device platforms are a newer but growing case. A fleet of sensors reporting telemetry behaves a lot like a fleet of chat clients: many independent, intermittent connections, each one small, each one needing to reconnect gracefully after a network drop. The process per connection model that suited phone based chat in 2009 suits sensor based telemetry just as well today.

Should You Build on Erlang Today?

None of this means Erlang is the right default choice for a new project. It solves a specific problem extremely well: high concurrency with strict reliability requirements. Outside that problem, the tradeoffs are real.

Consider Erlang When

Think Twice When

You need to hold a very large number of long lived connections open at once

Your workload is CPU heavy number crunching, such as video encoding or model training

Downtime or data corruption carries a high real cost, such as payments, telecom, or healthcare

You need to hire a large team quickly; the talent pool is small and senior

You want to update running systems without dropping active connections

Your team has no functional programming background and no time to build one

You are building real time chat, presence, or notification infrastructure

Your application is a fairly standard CRUD app with modest, predictable concurrency

Choosing Erlang in 2027 means accepting a smaller hiring pool and a language most teams are not already fluent in, in exchange for a runtime that has spent close to four decades proving it can stay up. For the right problem, mostly systems that look like WhatsApp did in 2009, that trade is usually worth making. For a typical web application with modest concurrency needs, it probably is not, and a mainstream language with a deeper hiring pool will get a team to market faster.

One factor that softens the hiring risk is that Erlang does not have to run the whole company. Many teams keep the connection handling and coordination layer, the part that benefits most from the process model, on the BEAM, while writing CPU heavy pieces such as image processing, machine learning inference, or video transcoding in a separate service and calling it over a network boundary or through a native implemented function. This lets a team get the fault tolerance benefits where they matter most without needing every engineer on staff to know Erlang.

Key Takeaways

Key Takeaways

• WhatsApp ran messaging for hundreds of millions of users with about 50 engineers because Erlang processes cost bytes, not megabytes, letting one server hold roughly 2 million connections.

• Supervisor trees and the let it crash philosophy contain failures to a single process instead of taking down a whole server.

• Hot code swapping let a small team deploy updates without disconnecting live users.

• Erlang in 2027 remains actively maintained, with OTP 28 adding security hardening, priority messaging, and supply chain documentation.

• Most new BEAM adoption today happens through Elixir, but the reliability guarantees still come from Erlang and OTP underneath it.

Pro Tips

Pro Tips

• If you are evaluating Erlang or Elixir for a new system, start by prototyping the supervisor tree, not the business logic. Getting failure isolation right early is much harder to retrofit later.

• Budget hiring time separately from budgeting engineering time. The BEAM talent pool is small, and a strong Phoenix developer is not automatically strong in OTP internals.

• Test hot code upgrades in a staging environment that mirrors production traffic before relying on them for a real release. The feature is powerful but unforgiving of a rushed rollout.

• Do not choose Erlang for raw computational speed. Pair it with a native implemented function or a separate service for CPU heavy work, and keep the BEAM focused on concurrency and coordination.

Conclusion

WhatsApp did not succeed because of a clever growth hack or an unusually gifted team of 50 people, though the team clearly was talented. It succeeded because the technology underneath matched the actual shape of the problem: millions of small, independent, long lived connections that needed to stay up and recover from failure on their own. Erlang in 2027 is still built for exactly that problem, and the companies still choosing it, from Discord to Klarna to Ericsson's own networks, are making the same bet WhatsApp made in 2009 for the same reasons. It will never be the most popular language on a job board. For the specific job of keeping millions of people connected at once without falling over, it remains one of the most proven.

Ayush Kanodia

Ayush Kanodia

Ayush Kanodia, an esteemed Director at HireFullStackDeveloperIndia, channels his passion into delivering cutting-edge IT services and solutions. Through his leadership, he has driven numerous successful projects, solidifying the company's standing as a pioneering force in the industry.

Build Your Agile Team

We provide you with a top-performing extended team for all your development needs in any technology.

Hourly
$20
It Includes
Duration
Hourly Basis
Communication
Phone, Skype, Slack, Chat, Email
Hiring Period
25 Hours (MIN)
Project Trackers
Daily Reports, Basecamp, Jira, Redmime, etc
Methodology
Agile
Monthly
$2600
It Includes
Duration
160 Hours
Communication
Phone, Skype, Slack, Chat, Email
Hiring Period
1 Month
Project Trackers
Daily Reports, Basecamp, Jira, Redmime, etc
Methodology
Agile
Team
$13200
It Includes
Team Members
1 (PM), 1 (QA), 4 (Developers)
Communication
Phone, Skype, Slack, Chat, Email
Hiring Period
1 Month
Project Trackers
Daily Reports, Basecamp, Jira, Redmime, etc
Methodology
Agile

Frequently Asked Questions

Is Erlang still actively maintained in 2027?
Yes. Ericsson's OTP team ships regular releases, including OTP 28 with security patches, a formal software bill of materials, and compiler improvements. Patch releases through 2026 focused heavily on hardening the runtime against specific vulnerabilities, which shows a project treating security as an ongoing commitment rather than an afterthought on an old codebase.
What is the difference between Erlang and Elixir for a new project?
Erlang and Elixir both run on the BEAM and share the same process model, supervisor trees, and fault tolerance. Elixir adds a more modern syntax and the Phoenix framework, which is why most new BEAM projects choose it today, while still depending on Erlang and OTP underneath for the actual runtime guarantees.
Does WhatsApp still use Erlang today?
Public reporting and engineering commentary indicate the core messaging backend has stayed on Erlang and the BEAM since the Meta acquisition, though the surrounding infrastructure, storage, and abuse prevention systems have grown well beyond the original stack as the product added features Meta required at its scale.
How hard is it to hire Erlang or Elixir developers?
Harder than hiring for mainstream languages. The combined talent pool is a small fraction of the overall developer market, and senior roles skew toward experienced engineers who understand OTP internals, not just syntax. Expect a longer search and a higher salary range, particularly for anyone with distributed systems experience.
What happens when an Erlang process crashes in production?
Its supervisor detects the failure and restarts it according to a defined strategy, often in milliseconds, without affecting other processes on the same server. This differs from typical exception handling because the developer does not have to predict every failure mode in advance for the system to recover safely.