Notes on engineering, architecture, and the craft of building software.
Why treating evaluations as a first-class product concern is the difference between shipping reliable LLM applications and guessing.
2026-04-28 · 4 min · AI · Testing
I default to stdlib and dataclasses until complexity is earned. Here is the heuristic I use to decide when a framework is worth the overhead.
Patterns and pitfalls from migrating a Next.js app to React Server Components.
How runtime validation and static types can coexist without duplication.
Why choosing well-understood tools leads to faster delivery and fewer surprises.
Scaling retrieval-augmented generation from prototype to production with OpenSearch.
Three years of Kafka in production — what worked, what didn’t.
Strategies for deterministic testing when your outputs are non-deterministic.
Dependency injection, middleware patterns, and production-ready error handling.
Moving from CloudFormation YAML to type-safe TypeScript constructs.
How we added exact page citations to an Azure AI Search RAG pipeline without touching the index — using byte offsets already in the data.
A practical guide to async database access in Python without the footguns.
Automated training, evaluation, and deployment with GitHub Actions and SageMaker.