Loading…
Elixir at Ramp 🧪
Pablo Meier
- Source
- Ramp
- Published
- Added to Yomu
Summary
Ramp engineer Pablo describes why Elixir suited several critical services, while arguing that technology choice is only one part of engineering success. He contrasts BEAM, Erlang’s virtual machine, and OTP’s abstractions for reliable, concurrent systems with the adoption and developer-experience advantages of Elixir, including familiar syntax, Mix, iex, hot code reloading, doctests, macros, and sigils. Immutability and aliased module calls are presented as safeguards against hidden state changes and circular-import problems in growing codebases, though the post also notes that Erlang and Elixir lag behind bolted-on type checkers. Ramp uses Elixir for its real-time Authorization engine and Risk analysis platform; the Authorization service is described as exceptionally stable and flexible for rapid feature development. The company’s largest backend remains Python, and the conclusion prioritizes sleep, trust, ownership, and psychological safety over any specific stack.
Context
The author was asked to design systems at Ramp and considered Elixir for services needing high reliability, real-time operation, strong concurrency, and data-pipeline ingestion. The post also addresses the challenge of maintaining large, long-lived codebases and emphasizes that engineering outcomes depend on team culture and management as well as technology.
Approach / What changed
Ramp uses Elixir for a real-time Authorization engine and a Risk analysis platform. The rationale combines BEAM and OTP capabilities for concurrency, resilience, and partial-failure handling with Elixir’s developer ergonomics, including Mix, iex, hot code reloading, documentation tooling, macros, sigils, immutability, and aliased module calls.
Takeaways
- BEAM and OTP provide built-in abstractions for reliable, concurrent, distributed systems, including handling partial failures and transient errors.
- Elixir’s Mix tooling supports concurrency-oriented tests, database sandboxing, failed-test reruns, and rapid development through iex and hot code reloading.
- Immutability lets a function rely on its input data remaining unchanged, while aliased module calls avoid the circular-import concern described for Python.