Erlang was created in 1986 at Ericsson's Computer Science Laboratory in Stockholm, with the goal of programming telephone exchanges that handle many thousands of calls at once and must never go down. How Joe Armstrong designed Erlang at Ericsson, together with Robert Virding and Mike Williams, is a story of starting from a real engineering problem and letting it shape the language. The name honours the Danish mathematician Agner Krarup Erlang, a pioneer of telephone traffic theory, and also reads as "Ericsson Language".
How Joe Armstrong designed Erlang at Ericsson
In the mid-1980s the lab, headed by Bjarne Däcker, experimented with many languages for telecom software, which Ericsson then wrote largely in its own language PLEX. Armstrong began by adding concurrency to Prolog. The first Erlang interpreter was in fact written in Prolog, and the syntax still shows it: lowercase atoms, capitalised variables, clauses ending in full stops.
Telephony imposed hard requirements. A switch handles huge numbers of independent activities, must keep running during software upgrades, and must cope with hardware and software faults without dropping every call. Erlang's answers became its defining features: very lightweight processes, message passing with no shared memory, built-in failure detection, and hot code loading.
Prolog was too slow for production, so Armstrong and Williams built JAM, a virtual machine written in C, around 1990. It was later replaced by BEAM, which remains Erlang's virtual machine today.
Design and key features
- Processes: Erlang processes are not operating system threads. They are managed by the BEAM, take a few hundred words of memory, and a single node can run millions of them.
- Message passing: processes share nothing and communicate by asynchronous messages, received with pattern matching.
- "Let it crash": instead of defensive code everywhere, a process that hits an unexpected error dies, and a supervisor restarts it in a known state.
- Distribution: sending a message to a process on another machine looks the same as sending to a local one.
- Hot code swapping: modules can be upgraded while the system runs.
- Functional core: immutable data, single assignment, pattern matching and recursion.
-module(counter).
-export([start/0, loop/1]).
start() ->
spawn(counter, loop, [0]).
loop(N) ->
receive
{increment, From} ->
From ! {ok, N + 1},
loop(N + 1);
stop ->
ok
end.
Each counter is its own process holding its state in the argument of a tail-recursive loop.
OTP, the AXD301 and open source
Ericsson packaged Erlang with a set of libraries and design principles called OTP (Open Telecom Platform). OTP provides standard "behaviours" such as gen_server and supervisor, so most Erlang systems share the same proven structure. Its best-known early product was the AXD301 ATM switch, launched in 1998 and containing over a million lines of Erlang.
That same year, Ericsson Radio Systems stopped using Erlang for new products in favour of mainstream languages. In December 1998 Erlang was released as open source. In 2003 he completed his PhD thesis, "Making reliable distributed systems in the presence of software errors".
| Year | Milestone |
|---|---|
| 1986 | Erlang begins at Ericsson CSLab |
| around 1990 | JAM virtual machine replaces the Prolog interpreter |
| 1998 | AXD301 launched; Erlang/OTP released as open source |
| 2012 | José Valim releases the first version of Elixir on the BEAM |
| 2021 | OTP 24 adds the BeamAsm JIT compiler |
Where Erlang is used
Erlang runs systems that need high availability and huge numbers of connections. WhatsApp built its messaging back end on Erlang and famously served hundreds of millions of users with a small engineering team. RabbitMQ, the message broker, is written in Erlang, as were CouchDB and the Riak database. Ericsson still uses it in mobile network equipment.
Influence and legacy
Erlang's actor-style concurrency inspired the Akka toolkit for Scala and Java. Its biggest legacy is the BEAM ecosystem: Elixir, created by José Valim in 2012, and Gleam, a statically typed BEAM language that reached version 1.0 in 2024, both run on the same virtual machine and use OTP. Joe Armstrong died in April 2019.
Is Erlang still used today?
Yes. Ericsson and the open source community release a new major OTP version every year, and the BEAM powers telecoms, messaging, fintech and IoT platforms. Knowing how Joe Armstrong designed Erlang at Ericsson, starting from the need to keep phone calls connected through faults and upgrades, explains why its answers to concurrency and failure still look modern decades later.
Frequently asked questions
Why was the first Erlang interpreter written in Prolog?
Joe Armstrong started by experimenting with adding concurrency and error handling to Prolog, which made Prolog the natural host for a prototype. It allowed fast iteration on the language design. Once the design settled, a C-based virtual machine replaced it for performance.
What does "let it crash" mean in Erlang?
It means not writing defensive code for every possible error inside a process. If something unexpected happens, the process exits, and a supervisor process restarts it from a clean state. Faults are contained and handled in one place instead of being scattered through the code.
Should I learn Erlang or Elixir first?
Elixir has friendlier syntax, modern tooling and the Phoenix web framework, so many newcomers start there. Erlang is smaller and teaches OTP directly, and most BEAM documentation and libraries are written in it. Since both share the same runtime, learning one makes the other much easier.







