-
Feb 8, 2026
Reducing degrees of freedom to make rules more dependable.
-
Feb 1, 2026
“A complex system that works is invariably found to have evolved from a simple system that worked.” — John Gall
-
Jan 26, 2026
“A model is a selectively simplified and consciously structured form of knowledge.” — Eric Evans
-
Jan 14, 2026
“I see dead people.” — The Sixth Sense (1999)
-
Jan 14, 2026
“You’re looking at it wrong.” — The Big Lebowski (1998)
-
Jan 4, 2026
“You’re either in or you’re out.” — Ocean’s Eleven (2001)
-
Dec 31, 2025
When designing Funx I leveraged protocols, which meant some concessions.
-
Dec 29, 2025
“You’re not thinking fourth dimensionally!” — Doc Brown, Back to the Future Part II (1989)
-
Dec 21, 2025
“The problem is choice.” — Neo, The Matrix (1999)
-
Dec 14, 2025
“I didn’t say it would be easy. I just said it would be the truth.” —Morpheus, The Matrix (1999)
-
Dec 7, 2025
Tap tap tap-a-roo
-
Dec 1, 2025
Lifting (or perhaps stealing) some of Ash’s good ideas.
-
Nov 24, 2025
How Ash calculations work and ways to deal with missing or uncertain data.
-
Nov 16, 2025
“That’s just, like, your opinion, man.”
—The Big Lebowski (1998)
-
Nov 9, 2025
Time for a closer look at actions.
-
Nov 2, 2025
How difficult is it to incorporate Ash into an existing codebase?
-
Oct 27, 2025
Exploring how Ash implements Ecto.
-
Oct 20, 2025
Where is the mess?
-
Oct 13, 2025
Authorization logic gets messy fast.
-
Oct 6, 2025
Not organization but coordination.
-
Oct 2, 2025
It’s all about the domain.
-
Sep 24, 2025
How do we handle side effects in a pure functional system?
-
Sep 18, 2025
“I’m not even sure what’s real anymore.”
—The Matrix (1999)
-
Sep 16, 2025
When are two things the same?
-
Sep 14, 2025
So many loops…
-
Sep 10, 2025
“They found me. I don’t know how, but they found me.”
— Dr. Emmett Brown
-
Sep 10, 2025
It feels a bit impolite to ask readers to download code and type mix commands just to run the examples. We have better tools now.
-
Aug 26, 2025
Why not keep equality inside the module where it belongs?
-
Aug 23, 2025
Polymorphism has always relied on tags. Elixir’s structs make them safer.
-
Aug 20, 2025
-
Aug 20, 2025
This post walks through the basics of protocols in Elixir. It’s the information I wish I knew five years ago.
-
Aug 19, 2025
-
Jun 7, 2024
Elixir Syntax Series
Data Types and Collections
Variables
Control Flow
Functions
-
Jun 5, 2024
Elixir Syntax Series
Data Types and Collections
Variables
Control Flow
Functions
-
Jun 3, 2024
Elixir Syntax Series
Data Types and Collections
Variables
Control Flow
Functions
-
Jun 1, 2024
Elixir Syntax Series
Data Types and Collections
Variables
Control Flow
Functions
-
May 25, 2024
Elixir Cluster Series
Leveraging CRDTs for eventual consistency
Elixir: Resilient distributed systems
Elixir: Running a cluster of nodes
Elixir: Running a cluster of dynamic nodes
Elixir and Mnesia: Running a cluster with state
Elixir and Raft: Running a cluster with state
-
May 20, 2024
Elixir Cluster Series
Leveraging CRDTs for eventual consistency
Elixir: Resilient distributed systems
Elixir: Running a cluster of nodes
Elixir: Running a cluster of dynamic nodes
Elixir and Mnesia: Running a cluster with state
Elixir and Raft: Running a cluster with state
-
May 15, 2024
Elixir Cluster Series
Leveraging CRDTs for eventual consistency
Elixir: Resilient distributed systems
Elixir: Running a cluster of nodes
Elixir: Running a cluster of dynamic nodes
Elixir and Mnesia: Running a cluster with state
Elixir and Raft: Running a cluster with state
-
May 10, 2024
Testing behaviors
-
May 8, 2024
Elixir Cluster Series
Leveraging CRDTs for eventual consistency
Elixir: Resilient distributed systems
Elixir: Running a cluster of nodes
Elixir: Running a cluster of dynamic nodes
Elixir and Mnesia: Running a cluster with state
Elixir and Raft: Running a cluster with state
-
May 3, 2024
Elixir Cluster Series
Leveraging CRDTs for eventual consistency
Elixir: Resilient distributed systems
Elixir: Running a cluster of nodes
Elixir: Running a cluster of dynamic nodes
Elixir and Mnesia: Running a cluster with state
Elixir and Raft: Running a cluster with state
-
May 1, 2024
Elixir Cluster Series
Leveraging CRDTs for eventual consistency
Elixir: Resilient distributed systems
Elixir: Running a cluster of nodes
Elixir: Running a cluster of dynamic nodes
Elixir and Mnesia: Running a cluster with state
Elixir and Raft: Running a cluster with state
-
Apr 25, 2024
Basic setup
-
Mar 13, 2024
Systems that require human intervention, especially in response to emergencies, depend on having accurate information about who is currently available. Phoenix Presence leverages Conflict-free Replicated Data Types (CRDTs) and the BEAM to provide a reliable and scalable presence tracking solution.
-
Mar 12, 2024
WebSockets facilitate real-time, bi-directional communication with low latency but introduce inherent challenges with concurrency. They lack guaranteed message delivery, where messages can arrive out of sequence or not at all. This can lead to inaccurate data presentations on the client side, which is reasonable in non-critical contexts but unacceptable in...
-
Mar 10, 2024
A Channel creates a separate process for each open WebSocket connection. It utilizes the WebSocket’s heartbeat to monitor the health of the connection, automatically terminating the process when the WebSocket is closed.
-
Mar 5, 2024
Consumer-Driven Contract Testing (CDCT) shifts the responsibility for integration testing from the provider to the consumers. Under this model, providers can freely update their services as long as the changes continue to pass tests defined by consumers. These tests, acting as contracts, specify the conditions the API must meet. If...
-
Mar 4, 2024
APIs are contracts that stipulate expectations, responsibilities, and mechanisms for identifying faults as services evolve. To ensure these contracts are effectively implemented, the supporting documentation must be current, precise, and easily navigable.
-
Mar 3, 2024
APIs (Application Programming Interfaces) establish contracts to enforce expectations, responsibilities, and mechanisms for fault identification as services evolve. These contracts are fundamental in maintaining reliability and accountability in today’s dynamic environments.
-
Mar 1, 2024
Phoenix, like most modern frameworks, has built-in functionality to reduce boilerplate for the common Create, Read, Update, Delete (CRUD) pattern.
-
Feb 20, 2024
Elixir introduces Agent, a pre-built abstraction of gen_server that simplifies state management.
-
Feb 20, 2024
A GenServer is a generic server process in Elixir that abstracts and manages the lifecycle and state of a server process. It handles incoming requests in sequential order, which is particularly useful for stateful operations.
-
Feb 12, 2024
Logs are a fundamental component of observability, providing a record of what and when a system event happened. They often contain additional context in the form of metadata, offering insights such as, “This event succeeded” or “This event failed.” Logs help operators and developers understand the sequence of events.
-
Feb 10, 2024
Logging is a fundamental tool in software development, providing insights into application operations by recording events as they occur. In Elixir, simple logging can be achieved with the IO module. For instance, IO.puts("This is a log message.") prints messages to the console, aiding in rapid development-phase debugging.
-
Feb 5, 2024
When Tasks are mission-critical and require features such as persistence, retry logic, and scheduling, or when they need to be executed in a specific order and are resource-intensive enough to potentially strain the system, a managed queuing system becomes necessary. This is especially true for operations such as batch data...
-
Feb 1, 2024
“The real world is concurrent… When you send an email, you have no idea what’s going on at the other end. You don’t share your variables with them or your data tables. They just take the message and do something. That’s how the real world works.” – Joe Armstrong
-
Jan 24, 2024
This post is part of the Testing Series, an overview of testing strategies for Elixir applications.
-
Jan 20, 2024
This post is part of the Testing Series, which provides an overview of testing strategies for Elixir applications
-
Jan 15, 2024
This post is part of the Testing Series, an overview of testing strategies for Elixir applications.
-
Jan 9, 2024
This post is part of the Testing Series, an overview of testing strategies for Elixir applications.
-
Jan 7, 2024
Software designed to solve real-life problems must effectively address the issue of concurrency, where the order of operations cannot be trusted due to the unpredictability of timing, distance between interactions, and the potential for missed or delayed messages. To prevent corruption of data or application state, it is crucial to...
-
Jan 5, 2024
LiveView is an extension of the Phoenix Framework designed for building real-time, lightweight, interactive web views. It processes most of its logic on the server, minimizing the need for JavaScript, thereby reducing code complexity and enhancing performance.
-
Jan 2, 2024
Elixir runs on the BEAM, the Erlang virtual machine, which allows Elixir to seamlessly interoperate with Erlang code and packages. This enables developers to leverage the extensive ecosystem available in Erlang while writing in Elixir’s modern and expressive syntax.
-
Dec 10, 2023
This post is part of the Testing Series, an overview of testing strategies for Elixir applications.
-
Dec 5, 2023
This post is part of the Ecto Series and the Testing Series.
-
Dec 1, 2023
This post is part of the Ecto Series and the Testing Series.
-
Nov 20, 2023
“I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object-oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with...
-
Nov 15, 2023
In complex systems, such as those managing millions of concurrent phone calls, some bugs are transient or rare, making them inherently elusive and impractical to trace and resolve. Erlang keeps this in mind, prioritizing robustness to ensure systems can continue operating smoothly despite individual failures. This approach is encapsulated in...
-
Nov 14, 2023
Publish Your Docs
-
Nov 13, 2023
This post is part of the Elixir Setup Series, covering essential tools and practices for Elixir projects.
-
Nov 12, 2023
This post is part of the Elixir Setup Series, covering essential tools and practices for Elixir projects.
-
Nov 10, 2023
This post is part of the Ecto Series.
-
Nov 7, 2023
This post is part of the Elixir Setup Series, and the Ecto Series.
-
Nov 3, 2023
This post is part of the Elixir Setup Series, covering essential tools and practices for Elixir projects.
-
Oct 10, 2023
Phoenix LiveView and Phoenix Channels have benefits and trade-offs. LiveView excels at server-side form management and real-time UI updates within web applications, simplifying development by centralizing logic on the server. Phoenix Channels offer greater modularity and support for non-web applications.
-
Oct 3, 2023
Socket.IO and Phoenix Channels are two prominent frameworks that facilitate real-time, bi-directional communication between clients and servers. This comparison aims to help developers understand which framework might best fit project requirements.
-
Oct 1, 2023
When it comes to building software for critical applications, reliability is paramount. One misstep can have devastating consequences, making it essential to choose a technology stack that prioritizes fault tolerance and recovery.