Skip to content

Writing

Notes on engineering, life, and faith

Writing on engineering, the homelab, personal stories, and reflections on faith — 179 posts since 2011.

Series

The Thirteen Full-Stack Layers

Complete · 14 parts

From the browser tab to the 3am backup — one post per layer of a production web stack, and the gap between a vibe-coded demo and a real product.

  1. 0 Vibe-Coded vs Production-Ready: 3 Layers or 13?
  2. 1 Frontend Foundations: The Layer Users Actually Touch
  3. 2 APIs and Backend Logic: Where the Rules Live
  4. + 11 more

View series →

Git for Working Devs

Complete · 14 parts

A sequential mini-course in Git for people who ship — fundamentals and conventional commits, then the branching, review, and collaboration workflows that hold a team together.

  1. 1 Conventional Commits, End to End
  2. 2 A .gitmessage Template and Commit Hooks That Enforce It
  3. 3 git rebase -i Without Fear
  4. + 11 more

View series →

System Design for Working Devs

Complete · 13 parts

A field guide to system design for the engineer who has to make the call and ship it — no FAANG-scale hand-waving. The five axes of every tradeoff, the CAP theorem without the folklore, idempotency, caching, designing for failure, and a full worked design at the end.

  1. -1 System Design from Zero
  2. 0 How to Think About System Design
  3. 1 Latency, Throughput, and Napkin Math
  4. + 10 more

View series →

Authorization in Practice

Ongoing · 5 parts

Who can do what, and how you prove it — roles vs attributes, policy tests that hold the line, multi-tenant isolation, audit trails, and what happens when permissions become a graph.

  1. 1 RBAC vs ABAC: Roles, Attributes, and Where Each One Breaks
  2. 2 Testing Authorization Policies Like the Boundary They Are
  3. 3 Multi-Tenant Authorization: One Database, Many Customers, Zero Leaks
  4. + 2 more

View series →

Agentic Engineering with Claude

Ongoing · 6 parts

A working dev's field guide to coding agents — what "agentic" actually means, Claude Code in the terminal, the feedback loops and guardrails that make it trustworthy, and shipping real features from prompt to deploy.

  1. 1 What "Agentic" Actually Means
  2. 2 Claude Code in the Terminal
  3. 3 Designing the Feedback Loop
  4. + 3 more

View series →

Latest

faith

You Cannot Impart What You Do Not Possess

You cannot lead people where you have never been. You cannot preach with power what you are not practicing with integrity. Ezra 7:10 on why the order — study, obey, then teach — is everything.

engineering

How Do Two Servers Never Pick the Same ID?

Auto-increment works right up until you add a second writer. The story of how distributed systems mint unique IDs without asking each other permission — ticket servers, UUIDs and the birthday math, Snowflake and ULID, and the one idea underneath all of them: who owns which slice of the ID space.

engineering

ReBAC: When Permissions Become a Graph

Google's Zanzibar modeled access as relationship tuples — editor of the folder that contains the doc. When your ABAC policies turn into chains of relationship-walking, ReBAC (OpenFGA, SpiceDB) is the tool built for it. What it buys, what it costs, and the seam that keeps you free to adopt it later.

faith

Faith Requires Movement Before the Miracle Happens

God did not part the Jordan while Israel rested in their tents. He waited until the priests stepped into the flood-stage water. Joshua 3 on why faith moves first — and the miracle meets the movement.

engineering

Audit Trails: Who Did What, When, and Prove It

Authorization decides what happens; the audit trail proves what happened. What a useful audit event records, spatie/laravel-activitylog for model changes, logging the denials (not just the changes), and why append-only is the property that makes it an audit log at all.

engineering

FrankenPHP on macOS: Dynamic Vhosts and Legacy PHP Pinning

A full FrankenPHP local dev setup on macOS — one catch-all config that serves every site in /var/www/sites with no per-site vhost, a launchd daemon that survives reboot, and an fp-pin helper that routes legacy projects to older PHP-FPM pools. Plus how to evict Nginx or Apache and translate their config.

Archive

2026 76 posts

2025 24 posts

2024 12 posts

2023 12 posts

2022 12 posts

2021 12 posts

2020 12 posts

2019 12 posts

2018 6 posts

2011 1 post