← Back home
things I wrote down
The notebook
Notes on AI engineering, software systems, developer tools, and the lessons that only show up after you ship. 33 posts.
- What I learned building AI verification pipelinesGetting an LLM to check its own output is harder than it sounds. Notes on building verification pipelines that catch real errors.AI Engineering · 7 min read
- Building reliable multi-agent workflows with LangGraphNotes on structuring multi-agent LangGraph workflows so they stay debuggable in production, not just in a demo.AI Engineering · 8 min read
- From prompts to production: making AI systems measurableA prompt that works once isn't a system. Notes on turning ad-hoc prompting into something you can measure and trust.AI Engineering · 9 min read
- Building a tiny operating system to understand computers betterNotes from writing ASH OS in C and x86-64 assembly, and what it taught me about the layers above the kernel.Systems · 10 min read
- What production API optimization actually looks likePerformance work rarely looks like a single clever fix. Notes on where API latency actually goes and what moves the number.Software Engineering · 6 min read
- What I learned building developer toolsNotes on building small tools for developers — a VS Code extension, a packaging tool — and what makes them worth keeping open.Developer Tools · 6 min read
- Custom slash commands for the workflows I run every dayClaude Code's slash commands stop being a novelty once you write your own. Notes on which repetitive workflows are actually worth automating this way.Developer Tools · 6 min read
- Shipping a small offline-first React Native app in a weekendA simple notes app is a good stress test for whether you actually understand React Native's storage and navigation story, not just its components.Frontend · 7 min read
- The window functions that replace half your subqueriesA handful of SQL tricks that make correlated subqueries and self-joins mostly unnecessary, once they click.Databases · 4 min read
- Why chain-of-thought prompts break under production loadChain-of-thought reasoning helps accuracy on hard problems and quietly costs you latency, cost, and consistency at scale. Both things are true at once.AI Engineering · 9 min read
- Multi-stage builds that actually shrink your image sizeThe difference between a 1.2GB image and a 120MB one is usually one Dockerfile pattern, not a different base image.DevOps · 4 min read
- Modeling agent retries as a graph instead of a loopA while-loop with a retry counter works until the failure modes multiply. LangGraph's state machine model handles that better than it first looks like it should.AI Engineering · 10 min read
- Reading a query plan without panickingEXPLAIN ANALYZE output looks intimidating until you know the four or five things it's actually trying to tell you.Databases · 6 min read
- Caching node_modules correctly, and cutting CI time in halfThe default GitHub Actions cache setup for a Node project usually isn't wrong, just incomplete in a way that quietly halves its usefulness.DevOps · 3 min read
- Chunking strategy matters more than embedding model choiceTeams spend weeks benchmarking embedding models and an afternoon on chunking. The ratio should usually be reversed.AI Engineering · 10 min read
- Narrowing unions without a wall of type guardsDiscriminated unions do most of the narrowing work for you, if the union is shaped to let them.Frontend · 4 min read
- Why I stopped using field injection in Spring Boot`@Autowired` on a field is the fastest way to wire a dependency and the easiest way to hide a circular dependency until it's a runtime surprise.Backend · 3 min read
- Packaging a desktop app without losing a week to code signingElectron's build tooling is genuinely good. Code signing on both platforms is where the schedule actually goes.Developer Tools · 7 min read
- Azure OpenAI vs OpenAI directly: what actually changes in your codeThe model behavior is close to identical. Everything around it — auth, rate limits, deployment naming — is where the real differences live.AI Engineering · 6 min read
- Cryptography basics every backend developer should actually knowYou don't need to implement cryptography to write secure code. You do need to recognize the handful of mistakes that show up in almost every codebase.Security · 11 min read
- When a document model quietly becomes a relational oneMongoDB schemas start flexible and end up needing the same normalization discipline as a relational database, just without the tooling that enforces it.Databases · 7 min read
- The Bash one-liners I actually use dailyNot a reference list of every possible flag. Just the handful that earn a spot in muscle memory.Systems · 3 min read
- The re-render you don't see coming from context providersA context value that changes identity every render silently re-renders every consumer, even ones that don't look like they depend on it.Frontend · 6 min read
- Building a golden dataset before you trust any eval numberRAGAS and OpenAI Evals both need something to evaluate against. The dataset you build that on matters more than which framework you pick.AI Engineering · 9 min read
- Cloudflare Workers vs a traditional backend for small APIsFor a genuinely small API, the edge-function model removes more operational weight than it costs in flexibility. That trade flips as the API grows.Cloud · 7 min read
- systemd units for a hobby project you don't want to babysitThe difference between a script you have to remember to restart and one that just comes back on its own is about fifteen lines of config.Systems · 4 min read
- Reverse engineering a file format with no documentation, patientlyWithout a spec, the file itself is the spec. The process is slower and more methodical than it sounds from the outside.Security · 10 min read
- Jinja2 templates for LLM prompts instead of string concatenationPrompt strings built with f-strings and concatenation get unreadable fast. A templating engine built for this exact problem already exists.AI Engineering · 4 min read
- Preview deploys as a real code review tool, not just a demo linkEvery PR getting a live URL is usually treated as a nice-to-have for showing stakeholders. It's also one of the better code review tools available, underused as one.DevOps · 3 min read
- Node.js vs Python for a small AI backend — what actually decided itBoth handle the API layer fine. The deciding factor is usually the ML ecosystem, not the language itself.Backend · 6 min read
- Streamlit for internal tools nobody else will ever seeBuilding a real frontend for a tool three people on your team will use is usually a waste of the time it costs.AI Engineering · 3 min read
- MVC in a world of API-first backends — does the pattern still hold?The view in MVC assumed a server rendering HTML. Most backends today don't. The pattern survives that shift better than it might seem.Backend · 6 min read
- Prompt chaining: breaking one big prompt into three small onesA single prompt asked to do three things at once usually does all three worse than three prompts asked to do one thing each.AI Engineering · 9 min read