Articles
Notes on what I learn while building software.
Using AI Series
The four levels of AI mastery
From assistant to programmable intelligence
Directing AI agents: From writing code to orchestrating it
From coding to orchestrating agents
Autonomous AI agents: When to delegate entire workflows
Delegating workflows to AI
When AI becomes the product: Designing AI-native systems
Blending code with AI reasoning
Abundant Intelligence Series
Your moat is melting: What AI does to knowledge work
What makes you valuable when AI can execute?
How to actually use AI
Direct AI like an on-demand team
The collapse of the middle: Where value goes when AI executes
Value moves to judgment and humanity
What remains when machines handle everything?
Work as expression, not survival
Application Design Series
Maintainable software: Building applications that last
Foundations of maintainable software
The dependency rule: Structuring code for independence
Structuring code for independence
Hexagonal architecture: Separating business from technology
Isolating business from infrastructure
Clean architecture in practice: Entities, use cases, and layers
Layered architecture for lasting code
Recent
What if we got online shopping wrong?
Reimagining e-commerce as open protocol
Building a web server with TypeScript and Koa
A lightweight TypeScript web server
Building an expert system in Python (backward chaining)
Linked to expert-system experimentBuilding an inference engine in Python
X86-64 assembly basics: Writing your first functions
Linked to libft-asm experimentFirst steps into x86-64 assembly
Building a program that writes itself (a quine)
Linked to dr-quine experimentCode that prints its own source
Building nm and otool: Parsing Mach-O binaries in C
Linked to nm-otool experimentReverse engineering macOS binaries in C
SHA-256 and MD5 in C: Implementing hash functions from scratch
Linked to md5-sha256 experimentImplementing cryptographic hash functions in C
Writing your own malloc in C: A memory allocator from scratch
Linked to malloc experimentBuilding malloc from scratch to understand memory