We've teamed up with Kyle Kingsbury, author of Jepsen, to build this series of distributed systems challenges so you can try your hand and see how your skills stack up.

The challenges are built on top of a platform called Maelstrom, which in turn, is built on Jepsen. This platform lets you build out a "node" in your distributed system and Maelstrom will handle the routing of messages between the those nodes. This lets Maelstrom inject failures and perform verification checks based on the consistency guarantees required by each challenge.

The documentation for these challenges will be in Go, however, Maelstrom is language agnostic so you can rework these challenges in any programming language.

Got Stuck? Need Help?

It's no secret that distributed systems are infuriating and difficult. Even the best developers in the world can be brought to their knees in the face of cluster failures. If you get stuck on these challenges or want to see how other folks are solving them, checkout the #dist-sys-challenge tag on the Community Discourse.

Let's Get Started

Can't wait to start? The Echo challenge will get you up and running with a basic echo request/response to help you understand how Maelstrom works and to make sure you have everything running correctly.

  1. 1


    Get the hang of working with Maelstrom in Go by creating a node which is a binary that receives JSON messages

  2. 2

    Unique ID Generation

    Implement a globally-unique ID generation system that runs against Maelstrom's unique-ids workload

  3. 3


    Implement a broadcast system that gossips messages between all nodes in the cluster. Gossiping is a common way

  4. 4

    Grow-Only Counter

    Implement a stateless, grow-only counter which will run against Maelstrom's g-counter workload. This