Back at the bench
· career, mlops, ai-agents
TL;DR — In June 2026 I left Doximity to help care for my grandparents in the UK. In the quieter hours I built Chem MLOps, a chemistry LLM that runs as a tool-calling agent, end to end. Now I’m moving to New York and ready to get back to building data platforms and products with a team.
Leaving Doximity
For two years I was a Software Engineer, Data at Doximity. The work I’m proudest of was making slow things fast and fragile things boring. Taking a Snowflake-to-Salesforce sync from 8 hours to 45 minutes, moving an ad-events streaming pipeline off legacy Ruby into version-controlled Snowflake SQL, and building an internal AI code review agent with the Claude API and several MCP servers to gain context in Snowflake, Glean, and Jira.
In June 2026, my family needed me more than my pipelines did.
Home
My grandparents are getting older, and for the next few months my job was being there. Appointments, routines, and a lot of time together, split between the US and the UK.
Caregiving doesn’t leave you long, uninterrupted stretches. It leaves you an hour here and an evening there. That shaped what I built: something I could pick up, push forward, and put down without losing the thread.
Chem MLOps
I trained as a chemist before I became a data engineer, so I came back to chemistry. Chem MLOps is the whole stack, from raw data to a model in production, built by one person on a small budget:
- Data: a Dagster pipeline pulls ChEMBL (2.96M compounds) and FDA TWOSIDES drug-interaction data, converts it to Parquet with DuckDB, and builds a ~1.1M-pair question-answer training set. EBI throttles each download connection to about 50 kB/s, so the download uses 16 connections in parallel.
- Model: a full fine-tune of Gemma 3 270M with PyTorch on a GCP L4, launched as a two-stage SkyPilot job and quantized to a 262 MB GGUF for Ollama.
- Agent: the model doesn’t get context stuffed into its prompt. It emits a JSON tool call, the server runs the lookup against LanceDB (compound search, polypharmacy side effects, RDKit structure rendering), and the result goes back into the conversation.
- Deployment: a free-tier GCP VM with Docker Compose, Caddy for HTTPS, Google sign-in, a one-at-a-time queue, and usage logs in GCS that I query with DuckDB.
The chart above is my favorite lesson from it. After the first training run, the model rarely asked for the tools it had. The fix wasn’t a bigger model. It was a second training stage that raised tool-call examples from 6% of the mix to 33%. For a small model, the data you train it on is the behavior you get.
It’s done and live, with CI/CD and a health check every six hours. If I pick it back up, the first thing I’d add is evaluation inside the pipeline: it still runs on MLX, so exports aren’t gated on a score yet. You can try the demo; one person at a time, so there may be a short queue.
The goal of this was to see if I could do it and to see if it could be done. I started a year before and this was the ideation phase. I was asking myself, what could I do with chemistry and LLM’s. This is for me and my learning.
I also started AI Health Harness, an eval harness that scores LLM-written clinical summaries against synthetic FHIR patients. Evals are where I want to spend more time.
Moving to New York
After lving in LA for the past 8 years, since graduating from Liverpool. I was convinced that I would rather burn calories instead of burning compressed dinosaurs. I missed the varied weather of the UK and just hopping on public transport and get to my destination without thinking about parking. In November of 2026, I made the leap of faith.
NYC has so much to offer in culture, tech, and as an experience. As I’ve mentioned, I would prefer to walk and take public transport compared to using a car. LA does have public transport but it could get to more places.
Ready to start again
Five months away gave me something I didn’t expect, a clearer picture of the work I want to do. I want to build scalable data pipelines, AI agents that use real data well, and the deployment and monitoring that keep the whole stack running.
I’m looking for my next role as a Senior Data Engineer. If your team is working on any of that, say hi on LinkedIn.