Callum Doty
Product Developer & Designer
Developer and analytical problem-solver based in Kansas City, focused on building systems that turn complex data into actionable decisions. My work spans statistical modeling, software development, and product design.
Focus and Interests
I enjoy tackling problems where rigorous analysis and well-designed software can meaningfully improve how teams make decisions. I’m particularly drawn to Bayesian reasoning, systems internals, and AI.
Selected Projects
- Quantitative Weather Trading System
A quantitative trading system for Kalshi's daily high-temperature markets: probabilistic forecasts, a market-facing scoring benchmark, and serverless execution live with real capital across 7 U.S. metros.
- House Campaign Allocation Model
Where should a party committee spend its money across House races? A calibrated forecast of every race, an explicit assumption about what party money does, and a test of DCCC's real spending against the best use of the same budget.
- AI Political Mail Catalog
An AI document intelligence platform for political campaign materials, using Claude, hybrid semantic search, and automated Dropbox ingestion to make 9,800+ past pieces searchable in plain language.
Recent Articles
- The Crash Loop
My document worker restarted every five minutes with no error in the logs. The cause was a 0.8 KB PDF that rendered to 815 MB, and the loop exposed four bugs in the recovery code built to survive exactly this.
- The Login That Failed Open
A sign-in error I blamed on my hosting platform was a middleware ordering bug, and the emergency fallback I wrote around it quietly turned authentication off for three months.
- Reading the Fine Print
How my political mail catalog reads each piece's client, state, and date with regular expressions, by ignoring the message and reading the two lines every piece carries for someone else: the legal disclaimer and InDesign's export stamp.
- Asked for 500, Got 40
A pgvector search that asked for 500 candidates got 40, and its filters ran after that. Tracing the cap to HNSW's ef_search, why raising it cost 12–21 seconds a query, and the scroll-driven candidate window that shipped instead. Part 3 of 3.
- Vectors in Postgres
How my catalog stores 1,536-number embeddings in Postgres with pgvector, why an exact nearest-neighbor search reads every vector, how an HNSW index walks a graph instead, and the keyword search that runs beside it. Part 2 of 3.