Writing
How software actually works. The unglamorous version.
Essays on retries, transactions, architecture, and the browser. Full pieces live on billyokeyo.dev, where I go on for longer than a card allows.
Frontend · Beyond the UI
Client-Side Rendering vs Server-Side Rendering Explained
Where should your UI be built? A clear look at CSR and SSR: what they actually do, when each is the right choice, and why the distinction still matters.
Frontend · Beyond the UI
The JavaScript Event Loop Explained
What happens when JavaScript takes over the browser’s main thread, and why a button click can freeze an entire interface.
Frontend · Beyond the UI
Hydration Explained
How server-rendered HTML becomes an interactive application, what hydration actually attaches, and where the common failures come from.
Frontend · Beyond the UI
Reflow and Repaint Explained
Why layout and paint are expensive, how the browser decides to redo them, and what that means for interfaces that feel slow.
Frontend · Beyond the UI
The Browser Rendering Pipeline Explained
From HTML and CSS to pixels on screen: how browsers parse, style, layout, paint, and composite a page.
Frontend · Beyond the UI
State Management Explained
What state actually is, where it should live, and why most state problems are design problems rather than library problems.
Architecture · Beyond CRUD
Event-Driven Architecture Explained
How independent services communicate by reacting to events, and how idempotency, outbox, sagas, and CQRS fit together.
Architecture · Beyond CRUD
CQRS Explained
Why reads and writes pull a model in opposite directions, and when separating them is worth the extra moving parts.
Distributed Systems · Beyond CRUD
Saga Pattern Explained
Managing long-running business processes across services without pretending distributed transactions are local ones.
Distributed Systems · Beyond CRUD
The Outbox Pattern Explained
Publishing events without losing data: how to solve the dual-write problem by committing the event with the business data.
Distributed Systems · Beyond CRUD
Distributed Locks Explained
How multiple servers agree that only one of them may perform a particular operation, and what locks cannot save you from.
Databases · Beyond CRUD
Database Isolation Levels Explained
Why two transactions can see different data, and how isolation levels trade consistency for concurrency.
Databases · Beyond CRUD
Database Transactions Explained
Keeping data correct when things go wrong: atomicity, rollback, and what transactions do not solve.
Backend · Beyond CRUD
Race Conditions Explained
The concurrency bug every backend developer should understand, and why it only shows up in production.
APIs · Beyond CRUD
Idempotency Explained
Building APIs that survive retries: why duplicate requests are normal, and how to keep side effects from happening twice.
APIs · Beyond CRUD
API Versioning Explained
How to evolve a public interface without breaking the clients that already depend on it.