Profile
I build software and lead the team that builds it.
I'm a software developer who's spent a lot of time around product engineering, internal tools, platform work, data, and AI. This site is where I keep the projects, notes, and ideas I want in public.
Head of Engineering at tapestry.ai
Leading engineering across product development, platform architecture, infrastructure, data systems, AI product work, and operational delivery.Where I usually end up
The specific tools change, but the shape is familiar: make the thing simpler, clearer, more reliable, or easier to change. Sometimes that's architecture, sometimes it's a feature, and sometimes it's a small script that takes something painful out of someone's day.
Product and platform engineering
Most of my work sits somewhere between product code and the systems underneath it. I like making the useful path obvious: clear interfaces, boring reliability, and enough structure that future changes don't feel like archaeology.
Architecture and system design
I spend a lot of time thinking through boundaries, data flow, failure modes, and the tradeoffs that only show up once real people start using a thing. The goal isn't clever architecture, it's software that stays workable.
Internal tools and automation
I have a soft spot for tools that remove repetitive work or make a messy process easier to reason about. A small internal system can be worth more than a big shiny feature if it gives people time and clarity back.
Data and AI when useful
I work with data systems and AI tools, but I don't treat them as a personality. Sometimes the right answer is a model, sometimes it's a queue, a report, a search index, or a better form. The useful bit is what matters.
The stack I reach for
I'm not overly attached to tooling, but these are the ones I reach for most. Python, TypeScript, and Go for application work; Postgres, ClickHouse, and DuckDB when the data side matters; Docker, Kubernetes, and AWS for the usual infrastructure pieces; and model providers when AI is genuinely part of the job. The highlighted ones are daily drivers, the rest I'm comfortable in and reach for when they fit.
- Python
- TypeScript
- Go
- C#
- Java
- PHP
- C++
- Rust
- FastAPI
- React
- Next.js
- Tailwind
- GraphQL
- .NET
- Laravel
- Vite
- Postgres
- ClickHouse
- DuckDB
- MySQL
- Cassandra
- Neo4j
- Redis
- OpenSearch
- Supabase
- Prisma
- Airflow
- Kafka
- dbt
- Spark
- Docker
- Kubernetes
- AWS
- Azure
- Vercel
- Linux
- Helm
- Ansible
- Nginx
- Traefik
- GitHub Actions
- ArgoCD
- Flux
- Grafana
- Prometheus
- Anthropic
- OpenAI
- OpenRouter
- LangChain
- pgvector
- PyTorch
- Ollama
- scikit-learn
- pandas
- NumPy
- Jupyter
- MLflow
- Weights & Biases
How I think about the work
I like the ordinary, practical parts of software: making something easier to use, easier to debug, easier to explain, or less painful to maintain. The interesting part is rarely just the code. It's figuring out what shape the code should have so the rest of the work gets easier.
Get in touch
I'm not selling anything here. If something on this site overlaps with what you're working on, you can find me on GitHub, LinkedIn, or X / Twitter.