I build useful software and write about how it works.

I work across product engineering, software architecture, data systems, AI, and infrastructure. This site is where I share the details, decisions, and lessons that are worth keeping in public.

Practical articles about software and technology.

Architecture, data, AI, reliability, and the engineering choices behind useful products. Written to make the decisions, trade-offs, and implementation details clear.

All articles
Latest article

Sprints Are the Wrong Unit for AI Delivery

MCP and LLM tooling make delivery, reporting, and testing more continuous. That changes what teams should optimize for.

  1. Indexes are not freeAdding an index speeds up reads. It also slows down writes, increases storage, and adds a maintenance burden that compounds over time.
  2. The Cost of Making Everything Real TimeReal time sounds like an obvious improvement until you price it. The useful question is not how fast the data can arrive, it is how often anyone actually acts on it.
  3. Why RAG Fails in ProductionMost RAG systems fail at retrieval, not generation. The fix is usually better evidence, ranking, and product logic.
  4. What Zero-Downtime Deployment Actually RequiresZero-downtime deployment depends on overlapping versions, safe traffic shifts, and database changes that work before and after release.
  5. Evals Are Not TestsUnit tests tell you when code breaks. Evals tell you if your LLM is still answering the right question. These are different problems, and treating them the same way is how AI products degrade silently.
  6. Idempotency Is Not a Nice-to-HaveEvery retry, webhook, and payment system depends on idempotency. Most engineers treat it as an afterthought. Here is what happens when they do, and what it actually takes to build operations that are safe to repeat.
  7. Event-Driven Architecture Without KafkaMost teams reach for Kafka too early. Here is how to build a production event bus with Celery and Redis, the patterns that make it reliable, and the four conditions where Kafka actually earns its place.

Engineering across the product and the platform.

The tools change. The goal stays consistent: make software clearer, more useful, and easier to change.

  1. Product and platform engineering

    Building product software and the services, infrastructure, and internal tools that support it.

    • TypeScript
    • Python
    • React
    • APIs
    • Infrastructure
  2. Software architecture

    Defining clear boundaries, data flow, failure handling, and change paths for software that needs to last.

    • System design
    • Distributed systems
    • Reliability
    • Observability
  3. Data systems

    Designing pipelines, storage, search, and data products around real operational and product needs.

    • Postgres
    • ClickHouse
    • Elasticsearch
    • Kafka
    • Data modelling
  4. Applied AI

    Using models where they improve a product, with the context, evaluation, and product logic needed to make them useful.

    • LLM products
    • RAG
    • Evals
    • Context engineering

Software built around real constraints.

Product platforms, open source software, and technical work that has stayed useful over time.

All work
  1. 01Active2015

    oembed

    A Craft CMS plugin that turns any pasted URL into a rich embed. Maintained since 2015 with 7K+ active downloads.

    • PHP
    • Craft CMS
    • oEmbed
    • GraphQL
    • Twig
  2. 02Archived2015

    OpenBazaar

    A peer-to-peer decentralized marketplace. One of several open source projects I contributed to as a volunteer, working across the Electron client, the contract system, and a WebSocket SDK.

    • JavaScript
    • Node.js
    • Electron
    • WebSockets
    • Peer-to-Peer

Software is better when the thinking behind it is clear.

I've spent my career building products, technical platforms, and tools for teams. I care about straightforward architecture, practical reliability, and explaining technical choices in plain language.

More about me

Find me online.

I'm not looking for a new role. If something here overlaps with what you're building, I'm always happy to compare ideas.