Blog
Me thinking out loud about building software: full-stack stuff, architecture, AI, and whatever rabbit hole I fell into this week. Grab the RSS feed.
15 posts
2026
A Folder That Contains Nothing Is a Lie
Folders make you decide where something belongs before you know where you'll need it. I made that bet in a side project and it broke the whole point of it.
5% a Day Sounds Gentle. It Isn't.
I found a tiny age penalty in my ranking code: 5% a day. After six months it scored a perfect match at 0.0001. The maths, and why my tests never noticed.
Why Does Every AI Tool Forget You?
LLMs don't remember anything. "Memory" is text an app quietly pastes into your prompt. How that works, why it stays stuck in one app, and what I measured.
Going Event-Driven? Read the Bill First.
Events are billed per event, per consumer, and per kilobyte. I did the math at three volumes so your AWS invoice doesn't have to surprise you.
Microservices? Do You Really Need Them?
Split a monolith and every multi-step operation becomes a distributed transaction. Here's why I'd hand that job to an orchestrator.
2025
LLMs Don't Read Your Prompt. They Count It.
A model never sees your text. It sees a list of integers called tokens, and that list is what you pay for and what your context limit counts.
Semantic Search: What It Is and How I Built It
Semantic search matches meaning, not keywords. The embedding model was the easy bit. Picking a vector size and an index my database could serve was the job.
Do You Really Need AI Agents?
Usually not. Most LLM features are cheaper, faster, and easier to trust as a fixed workflow. Here's when an agent earns its keep.
What Exactly Is MCP?
MCP is a standard plug for AI tools. Write a tool once and any app that speaks the protocol can use it. What it fixes, and what it costs you.
What Are LLMs, and How Do You Build Stuff With Them?
An LLM just predicts the next token. Everything useful is the scaffolding around it: context, tools, and memory. My map, via LangChain and LangGraph.
2024
I Wrote a JSON Parser From Scratch
A JSON parser is two small programs: a tokenizer and a recursive descent parser. I built both in TypeScript on Deno to see how they tick.
I Built a Spell Checker to Watch an Algorithm Think
A spell checker is edit distance plus a dictionary. Here's how Levenshtein distance works, with code and a visualizer that shows the matrix filling in.
Hoisting in JavaScript, Without the Hand-Waving
JavaScript registers every declaration before it runs any code. That one fact explains undefined from var, callable functions, and the temporal dead zone.
How JavaScript Actually Runs Your Code
Every bit of JavaScript runs in an execution context built in two passes: memory first, then code. Trace that by hand and the weird stuff stops being weird.
Big O, Minus the Scary Math
Big O is just how much more work your code does when the input grows. Four common shapes, JavaScript examples, and what they cost at real sizes.