Curriculum
43 tasks, 6 phases, ~26 weeks. Each task has a concept, an exercise, and a verification test. Your repo tracks which ones you own.
phase 0 Onramp 5 tasks
phase 1 Go fundamentals 6 tasks
1.1-hello-world
Setup & stdin-echo
→
1.2-types-structs
Types, Structs, Interfaces — the Maelstrom node pattern
→
1.3-error-testing
Error handling + table-driven tests
→
1.4-pointers-slices-maps
Pointers, slices, maps — KV REPL
→
1.5-goroutines-channels
Goroutines, channels, the intentional race
→
1.6-tdd-practice
TDD muscle — property tests, reflection, SVG clock
→
phase 2 HTTP + stdlib 6 tasks
2.1-http-protocol
HTTP as a protocol (what curl actually sees)
→
2.2-net-http-server
net/http JSON API — no routers
→
2.3-concurrency-patterns
Worker pool + fan-out/fan-in + context
→
2.4-networking-serialization
TCP + line-delimited JSON — the Maelstrom twin
→
2.5-time-tickers
time.Ticker + graceful shutdown
→
2.6-testing-at-scale
Acceptance tests + fakes over mocks
→
phase 3 Backend building blocks 7 tasks
3.1-sql-fundamentals
SQL fundamentals — no Go
→
3.2-postgres
Postgres via database/sql + pgx
→
3.3-caching-fundamentals
Caching fundamentals — redis-cli, no Go
→
3.4-redis
Redis from Go — rate limit, lock, cache-aside, pub/sub
→
3.5-queue-fundamentals
Message queue fundamentals — nats CLI, no Go
→
3.6-nats
NATS + JetStream from Go
→
3.7-mini-system
Three-binary link-analytics system
→
phase 4 Distributed-systems theory + practice 5 tasks
phase 5 Gossip Glomers 14 tasks
5.1-echo
Challenge 1 — Echo
→
5.2-unique-id
Challenge 2 — Unique ID generation
→
5.3a-broadcast-single
Challenge 3a — Single-node broadcast
→
5.3b-broadcast-flooding
Challenge 3b — Naive multi-node broadcast
→
5.3c-broadcast-fault-tolerant
Challenge 3c — Fault-tolerant broadcast
→
5.3d-broadcast-efficient
Challenge 3d — Efficient broadcast
→
5.3e-broadcast-constrained
Challenge 3e — Latency + budget constrained broadcast
→
5.4-g-counter
Challenge 4 — G-Counter with seq-kv
→
5.5a-kafka-single
Challenge 5a — Single-node log
→
5.5b-kafka-lin-kv
Challenge 5b — Multi-node log via lin-kv
→
5.5c-kafka-efficient
Challenge 5c — Efficient multi-node log
→
5.6a-txn-single
Challenge 6a — Single-node transactions
→
5.6b-txn-read-uncommitted
Challenge 6b — Read-uncommitted transactions
→
5.6c-txn-read-committed
Challenge 6c — Read-committed transactions
→
Not sure where to start? Phase 0 kicks off with concepts, no code. If you already know backend, run
go-dojo placement phase-3 to skip ahead.