In Season 15 episode 2, Elixir Wizards Sundi Myint and Charles Suggs chat with Micah Cooper to talk about distributed systems, data replication, and what it actually looks like to build these ideas in Elixir.
Micah shares his journey from Ruby to Elixir and walks us through Visor, a library he’s building based on the Viewstamps replication algorithm. Inspired by systems like TigerBeetle, Visor explores how you can replicate state across nodes using GenServers, giving you fault tolerance and recovery without relying entirely on traditional database patterns.
We talk about the difference between distributed systems and data replication, where things tend to get misunderstood, and what changes when you start thinking about state this way. The conversation also touches on event sourcing, tradeoffs in system design, and how Elixir’s distributed model makes some of these concepts more approachable than you might expect.
Along the way, we talk about building for curiosity, experimenting with new ideas, and how projects like this push the ecosystem forward.
Topics discussed in this episode:
Building Visor and working with the Viewstamps replication modelReplicating GenServer state across nodesDistributed systems vs. data replicationLessons from TigerBeetle and financial system designEvent sourcing challenges and tradeoffsRethinking database-first architecturesSnapshotting, recovery, and fault toleranceThe role of Elixir’s distributed modelExperimentation, learning, and building for curiosityLinks mentioned:
Micah’s GitHub https://github.com/mrmicahcooper
Micah’s GitLab https://gitlab.com/mrmicahcooper
The Visor repository: https://gitlab.com/mrmicahcooper/visor
Visor Hex Package https://hex.pm/packages/visor
Ruby on Rails https://rubyonrails.org/
Phoenix LiveView Framework https://www.phoenixframework.org/
Zig Programming Language https://ziglang.org/
TigerBeetle https://tigerbeetle.com/
TigerBeetle internal docs https://github.com/tigerbeetle/tigerbeetle/tree/main/docs/internals
The BEAM https://www.erlang-solutions.com/blog/the-beam-erlangs-virtual-machine/
GenServer https://hexdocs.pm/elixir/GenServer.html
Apache Kafka https://github.com/apache/kafka
RabbitMQ https://www.rabbitmq.com/
Redpanda https://www.redpanda.com/
SQL https://www.ibm.com/think/topics/structured-query-language
Kubernetes https://kubernetes.io/
YAML https://yaml.org/
Nomad Workload Orchestrator https://developer.hashicorp.com/nomad
Flutter https://flutter.dev/
Commanded https://hexdocs.pm/commanded/Commanded.html
Go Programming Language https://go.dev/
Clojure Programming Language https://clojure.org/
Nebulex https://hexdocs.pm/nebulex/Nebulex.html
Mnesia https://www.erlang.org/doc/apps/mnesia/mnesia.html
Cachex https://hexdocs.pm/cachex/Cachex.html
libgraph https://hexdocs.pm/libgraph/Graph.html
Horde https://hexdocs.pm/horde/Horde.Registry.html
NocFree split keyboard https://www.nocfree.com/
Micah’s LinkedIn https://www.linkedin.com/in/micah-cooper-4a737560/