About

I translate between people who don't share a vocabulary, build from what I learn, then figure out what happens when it meets the real world.

Both halves of that came out of the same four years. I learned the second half because I got the first half wrong.

A trader told me the pricing screen was slow. The quant who owned the model agreed it was slow. So did the engineer who ran the service. Three people, one word, total agreement. For most of a week we worked on three different problems. To the trader, slow meant the gap between wanting a price and having one, and most of that gap was happening in his hands rather than in the system. The quant meant how often the model recalibrated. For the engineer it was p99 latency on a service his numbers said was comfortably fast. Nobody was wrong. Nobody was describing the same thing.

Getting the three of them in a room to agree on the word was the whole fix. After that we could measure the thing they actually meant rather than the thing each had assumed the others meant. I've done some version of that every year since.

I spent four years as a product manager on FICC electronic trading at Bank of America, mostly on external vendor integrations and real-time data pipelines. Vendor work is the part I'd point at now: someone else's system, someone else's roadmap, your users' deadline, and no authority over any of it. You learn to find the one question whose answer determines everything downstream, and to ask it before anyone has committed to a design.

It's also where I stopped trusting stated requirements as a description of what people do. A desk that can't opt out of your software tells you the same day when you've misread them, and they aren't gentle about it.

At Columbia I've been building the things I used to write specs for, and running into the same problem from the other side. On Sift, the event app I co-built and shipped, we put a taste questionnaire in front of every new user because a recommender with no signal can't rank. Not one person finished it. Sixty percent of active users reached full personalization anyway, from swipes alone. We had assumed users needed to be asked. They had been answering the whole time, and I could only see it because we had instrumented both paths.

On Conviction, a retrieval system over SEC filings, I made the same mistake against a machine instead of a person. I built year-over-year risk-factor diffing on top of retrieval, because retrieval was the system I had. But top-k returns the passages most similar between two documents, which are exactly the ones that didn't change. I was sampling boilerplate and diffing it. The feature only worked once I was willing to route around the thing I had just finished building.

I'm also a research assistant at Columbia's SEA Lab, working on a multi-agent system for mental rehearsal under Professor Xuhai Xu, with a paper under submission to CHI 2027.

Currently
Building

Conviction, a retrieval system for SEC filings.

Researching

Multi-agent mental rehearsal at Columbia's SEA Lab. Under submission to CHI 2027.

Looking for

Full-time product and applied AI roles starting December 2026.