Daniel Ahn · Product engineer
I came to engineering from drawing.
Art Center, then illustration, then game design, then the web. It looks like three career changes. It has been one job the whole time: make something complicated legible enough that a person can act on it.
That sentence sounds like a designer’s line until you notice it is also the hardest unsolved problem in running AI agents. An agent works until it reaches the edge of what it was allowed to do, and then it has to stop and ask someone. What that person sees at that moment — whether they can decide from it alone, or have to go read the logs — is an interface. It is almost always a bad one.
Every ML engineer entering this field drills the agent-facing surfaces. The one where an agent has to ask a person something is nearly empty, and it is user research, information architecture and interface design wearing infrastructure clothing.
So that is the corner I work, and the reason I am not trying to become a worse machine-learning engineer to get there. The full argument — seven stages, two laws, and why the sixth one is load-bearing on everything upstream — is on the practice page. What I have actually shipped, and what a stranger can verify without trusting me, is on shipped.
What I’m curious about right now
A list of tools claims competence; a list of open questions claims interest, and only one of those is checkable. These are the questions I am actually spending evenings on, and the ones the Museo exists to work through in public.
Concurrency and agreement
What a system gives up to go fast. Pessimistic locking buys safety by making everyone wait; optimistic control bets that conflicts are rare and pays for the bet when it loses. Then CRDTs — Yjs, Automerge — refuse the premise entirely and make conflicting edits merge by construction, which is either the end of the argument or a much more interesting version of it.
The transport layer
The part I most want to be excellent at. What HTTP actually promises versus what we assume it promises. The humble queue, which solves more distributed-systems problems than any clever thing. What serverless really changes about the shape of a request, and what running at the edge on Cloudflare changes again.
Crypto as a data layer
Not a transport layer — a data layer, and an exotic one: a structure that buys agreement among parties who have no reason to trust each other, at a price no ordinary database would ever pay. Sui is the specimen I know best, because its object model makes the usual consensus question conditional rather than universal.
Where I’ve worked
Gallatin AI
May 2025 — present
Los Angeles
Frontend Engineer
Second frontend engineer, employee #15, on a real-time planning and tracking platform for moving people, equipment and cargo. I proposed and led the data layer’s move onto TanStack Query and then TanStack DB — the architecture every feature is now built on — and I own how live events are batched, deduplicated and reconciled. I also started the shared design-system repository and remain its leading contributor, and I was the sole frontend developer on the product’s first AI agent workflow, which is in production and trusted for live writes to operational data.
The product is not public and the numbers behind this work stay on my resume rather than on a public page. Happy to walk through any of it.
ExploreLearning
Aug 2022 — Nov 2024
Remote
Software Engineer
Sole engineer responsible for Gizmos, the company’s flagship product — a library of 550+ interactive maths and science simulations used by schools across the US and Canada. The codebase had a two-decade lineage: simulations that began in Macromedia Director, were rebuilt for HTML5 by a rotation of outside contractors, and reached me as pre-ES6 JavaScript on RequireJS with no usable documentation. I ended a standing external-contractor dependency, took the bug-fix cycle from weeks to same-day, and self-proposed the modernisation off RequireJS and jQuery onto modern JavaScript and Vue 3.
The Gizmos library — the product itself (free account required to run one)
How I got here
- 2026
The handoff
Harness engineering as the occupation. Four products built around the moment an agent has to ask a person something — and nine merged correctness fixes in Sui’s official SDKs.
- 2025
AI-native, not AI-assisted
Built a personal operating system for running many agents at once. The interesting problem turned out not to be the agents. It was the queue where they hand work back.
- 2024
On-chain, at the bytecode level
First open-source pull requests to Sui. Learned Move properly, which mostly meant learning what the object model refuses to let you express.
- 2023
Interfaces worth defending
Vue 3, Nuxt, TypeScript. Fell hard for interfaces that are both beautiful and fast, and stopped believing those were in tension.
- 2022
Career transition
Left a previous career for software engineering. Self-taught, mostly by reading source rather than tutorials.