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

  1. 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.

  2. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 2022

    Career transition

    Left a previous career for software engineering. Self-taught, mostly by reading source rather than tutorials.

If an agent on your team has to ask a person something, I want to see that screen.

Get in touch