Ruo Lee — Notes
Design notes from an AI engineer. Not what was built, but why it was decided that way.
- OPIc app
The week signups fell 27% and revenue hit a high
Weekend signups dropped and I went in expecting an outage. It was the seasonal downswing of the whole market, and once I measured the cohorts it turned out this was never a retention business.
- Map interfaces
Setting the map inset rule by measurement
I decided when to show the inset map by running all 155 stops. Brussels was the single exception, and the 104px size stayed an eyeball call to the end.
- OPIc app
R8 optimisation deleted the payment plugin
Turning on R8 as Play Console required stripped the Cordova payment plugin registry. In-app payments sat at zero for ten days; one keep rule fixed it.
- OPIc app
A file that starts with moof
Re-entering the start function across its await threw away the initialisation segment. I blamed iOS twice and was wrong twice; printing the first bytes of the upload settled it.
- OPIc app
Six KST boundary bugs on a UTC server
The server runs on UTC and the user's day starts in KST. Six bugs with nothing in common on the surface shared one root: two reference points mixed inside a single function.
- OPIc app
Multi-account farming cost us $0.27
I measured the scale before picking a countermeasure. At $0.27 the answer was to do nothing, and to remove one existing defence that was causing more harm than it prevented.
- Agent memory
Why we vendored 13,000 lines of open source
Neither a dependency nor a fork worked, so we vendored. The price is a discipline: no formatter over that tree, commits kept separate, and what we cannot fix written down.
- Dynamic execution engine
When Mount prefix matching hides a route
The deploy succeeded, the route was registered, and calls still returned 404. FastAPI's Mount matches on prefix and takes the first hit; allowing a slash in the alias was the cause.
- Agent memory
The failures that never throw
Six defects that never raised an error. All of them used one empty array for both "nothing there" and "could not fetch"; four were caught before deploy.
- Agent memory
Measuring the similarity threshold 0.85
I started at 0.9, then measured real sentence pairs through the production embedding model and landed on 0.85. The two directions of failure cost different amounts, so the slack went to one side; on the search path I dropped the threshold entirely.
- Agent memory
Why Korean conversations produced English memories
The extraction prompt carried 14 English few-shot examples. No placement of an instruction changed anything; cutting to three examples with one Korean pair did.