Elixir's GenStage Demand (a Visual Explainer)
Concurrency gives us more workers; demand tells us when to stop sending them work. This is what I want to point people to when we talk about "demand".
Writing about Elixir, system architecture, and more.
Concurrency gives us more workers; demand tells us when to stop sending them work. This is what I want to point people to when we talk about "demand".
How I experimented with building support for Redis Cluster into Redix (Elixir's Redis client) without writing code, solely relying on AI tooling.
Two BEAM escape hatches for counting fast—shared, mutable, off-heap integer arrays. How :atomics and :counters work, what they guarantee, and when to reach for each.
How we are periodically dumping metrics about our most demanding BEAM processes into an easy-to-query ClickHouse table.
My own sort of "wrapped" for the 2025 year.
It can be hard to keep tests asynchronous as Elixir applications grow in size and complexity. Let's see why, and explore fixes.
Inspired by others doing this, here's a writeup of the things I use—mostly tech—2024 edition.
This is how we significantly improved compilation time for Elixir projects that use Gettext, using a few metaprogramming tricks and ten years of Elixir experience since we wrote the first version of this library.
A quick walkthrough on how to verify JWTs coming from Apple's App Store APIs using Elixir.
This is an overview of the HTTP clients we have available in Elixir, as well as when to use each one.
I'm publishing a new video series about network programming in Elixir, where I solve the networking puzzles on Protohackers.
An experiment in solving AoC 2022 with Rust and some AI (GitHub Copilot and OpenAI's ChatGPT).
Are database migrations good? Probably, but are we using them in the right way? In this post, I write about how I think about migrations and what I'm doing to mitigate some of their shortcomings.
An overview of how we test Elixir applications that interact with AWS.
A short look at mixing property-based tests and example-based tests to get the best of both worlds.
A look into the RabbitMQ topology (exchanges, queues, bindings) and Elixir architecture that we use to perform RPCs over RabbitMQ.
A look at process pools and how to build routing pools (as opposed to checkout pools) using Elixir's built-in Registry.
How we're managing, evolving, and sharing Protobuf schemas across several services and programming languages.
How we can use the gen_statem behaviour to implement a resilient state machine that holds a connection to an external service.
I'm retiring a library of mine from Hex. I want to explain why.