I'm a software engineer at Solve Intelligence, where I build AI tools for patent attorneys.
I studied computer science at Durham and finished top of my year. I also learned to row there, and spent a year running Trevelyan College Boat Club. Not wanting to wake up for an outing just to be canceled, I built a model that forecasts conditions on the Wear.
For my master's project I searched for tiny vision models that watch water fleas for signs of stress, an early warning of water pollution.
Work
I joined Solve straight out of uni. Most of my work is on Charts: spreadsheets for IP search and analysis, each filled in by an agent that plans the work and delegates sections of it to subagents. Work that used to go out to a search specialist, or take tens of hours of an attorney's time, comes back in minutes. I took it from a prototype to a production system that thousands of customers use every day, and they now use it for all sorts of tables it was never designed for.
I also built the infrastructure that runs thousands of agent traces a day, which now underpins most of the platform. Customers can leave agents working in the background, close the tab, and come back to them still streaming live.
Three problems took most of the time. The first was streaming. Agent messages and chart edits both have to reach the browser instantly, exactly once, and survive a bad connection. Every change is an event: the ones worth keeping are written to Postgres, the rest are applied and passed on, and all of them travel over Redis to the API, then to the browser over server-sent events, or long polling when the network is poor. A client that drops reconnects from a cursor into what's already persisted, so it catches up with no gaps and no duplicates.
The second was time to first token. We grew from working on one document at a time to large projects, and were loading and parsing documents, sometimes more than once, for agents that never read them. Now they load lazily, and OCR splits each document into page ranges that run in parallel and are stitched back together.
The third was scale. Agent volume has grown exponentially, and traces have gone from short, bounded tasks to long, open-ended ones. Fitting many agents on one container meant hunting down work that held the GIL and stalled every other agent beside it.
Before Solve I spent a summer at Cisco, working on the Webex web client.
Research
My thesis asked how little energy a useful vision model can spend, and what it has to give up to get there. The task was watching water fleas, which spin when the water around them is polluted, on a device powered by a microbial fuel cell. Treating detection as finding points rather than drawing boxes, then searching five hundred architectures and measuring each one on the hardware, gave a three-layer network that uses 2.2 µJ a frame: 680 times less than YOLO11-nano.
The same approach works well beyond water fleas: anywhere you don't need the general reasoning of a large model, but do need low latency, low cost or high throughput.
On the side I rewrote TD-MPC2, a model-based reinforcement learning method, in JAX. Compiling the planning and update steps makes it train five to ten times faster than the original. For two years I also ran undergraduate labs, in Computational Thinking and in Networks and Systems.
On the river
I learned to row at Durham, and in 2023 I became president of Trevelyan College Boat Club: a year of training plans, races, budgets and boats. Whether we could go out at all depended on the Wear, so in 2024 I built a deep-learning forecast of the river level and a dashboard the clubs check before they boat.