Home
Logs

Learning backend development

Deepening my understanding of backend development, infrastructure, and engineering best practices in Elixir.

Below are my learning logs - mostly to keep me accountable but maybe it'll be helpful for other people learning backend development.

Jun 18, 2026 – Jun 24, 2026

003 - OTPing the game server

Implemented the UI for Forbidden Nublar and revisited Elixir fundamentals

I re-read Elixir in Action chapters 8-11 which covered GenServers and other OTP fundamentals. I implemented a DynamicSupervisor and Registry which spawns a Game.Server GenServer per active match. The game server stores the game state, handles updates, and syncs the updated state to Postgres. The supervisor + registry smoothly handles crashes by reloading the game state from the database.

May 18, 2026 – May 24, 2026

002 - Building the UI and Elixir refresh

Implemented the UI for Forbidden Nublar and revisited Elixir fundamentals

I re-read Elixir in Action chapters 1-7. It was good to revisit some of the language and OTP fundamentals. I found it interesting to notice which language features we rarely use at Knock and which standards are Knock-specific.

I also worked on stubbing out the UI for Forbidden Nublar and game logic. It was fun to quickly iterate on the design with agents although I’ll be hand coding the majority of the backend.

Forbidden Nublar board design Forbidden Nublar lobby design

On the side, I’ve been playing Factorio and reading A Philosophy of Software Design. It’s fun to compare the challenges of designing software to the more spacial challenges of laying out your factory in Factorio.

May 11, 2026 – May 17, 2026

001 - Kicking off — backend development syllabus

Outline of a 6-month plan for deepening my backend engineering experience

I recently moved to the Platform team at Knock and want to deepen my backend skills in Elixir and related technologies. Over the next ~6 months, I’ll spend a few hours per week reading and working on a side project.

The project will be a small multiplayer game whose events feed an analytics pipeline. The project will likely include:

  • Real-time core: Phoenix Channels + LiveView, one GenServer per match, Registry for lookup, ETS for hot reads, supervision tree
  • Persistence: Postgres, Redis
  • Analytics pipeline: Broadway consumer reads game events off SQS → ClickHouse for analytical queries
  • Monitoring: OpenTelemetry or similar monitoring setup
  • Deployment: deployed on AWS via Terraform or similar

Phase outline

1. Pre-work — game scaffolding

  • Read: Phoenix LiveView guide, Elixir in Action (ch. 1–4 review)
  • Build: Pick the game, sketch rules, ship a basic game

2. OTP & real-time

  • Read: Elixir in Action (ch. 5–12), Designing Elixir Systems with OTP, Saša Jurić’s Soul of Erlang and Elixir, Phoenix Channels + Presence docs
  • Build: Basic multiplayer setup

3. Storage & indexing

  • Read: Indexing Beyond the Basics, DDIA (ch. 7, 11, 12), Postgres MVCC + isolation docs, Broadway / ClickHouse / Redis docs, phx.gen.auth + OWASP Auth Cheat Sheet
  • Build: Players can sign up, see their match history, and check a leaderboard backed by a basic analytics pipeline

4. Distributed systems & observability

  • Read: DDIA (ch. 5, 6, 8, 9), Dynamo paper (skim), OpenTelemetry Elixir docs
  • Build: Improve system reliability and monitoring

5. Deployment & design write-up

  • Read: AWS VPC / IAM / SQS / CloudWatch / Secrets Manager docs, Terraform Getting Started, example design docs (Stripe idempotency, Google design doc format)
  • Build: The whole thing running on AWS

Week 1

  • Read DDIA chapter 1
  • Narrowed down on building a Jurassic Park themed Forbidden Island clone
  • Worked on game design document and state machine
  • Scaffoled Phoenix project