Blog
Long-form essays on systems, architecture, and ML in production.
2026 (25)
- Oct 18 Observability for GenAI Systems: What You Need to See Before Something Breaks
- Sep 23 Why your flawless code will still break during a live demo
- Sep 08 Longer context windows don't eliminate the need for retrieval
- Aug 25 Every layer of configurability has an ongoing maintenance cost
- Aug 18 MLOps in a Regulated Industry: What Actually Changes
- Aug 04 Graceful shutdown handling prevents more incidents than any autoscaling tweak
- Jul 21 Consent state is data too, and it needs the same residency rules
- Jul 07 Cross-region calls in the hot path are a design decision, not an accident
- Jun 23 Shadow deploy new models before they get real traffic
- Jun 10 Evaluating GenAI Guardrail Tooling: What We Actually Use
- Jun 09 Secrets rotation should be routine, not an incident response step
- May 26 An alert that doesn't require action shouldn't page anyone
- May 12 Know your database's real connection limit before you scale horizontally
- Apr 28 Evaluation sets need maintenance too
- Apr 16 What SOC2 Audits Actually Check For, As an Engineer
- Apr 14 A schema registry pays for itself the first cross-team incident it prevents
- Mar 31 Give every service in a chain its own latency budget
- Mar 17 Treat any user-supplied text reaching an LLM as untrusted input
- Mar 05 Debugging Distributed Systems: A War Story
- Mar 03 Blue-green deploys need real thought for stateful services
- Feb 17 Documentation has a half-life, budget for refreshing it
- Feb 03 Rate limiting per tenant, not just globally, prevents noisy neighbors
- Jan 27 Terraform Patterns for Multi-Tenant Infrastructure
- Jan 20 Every model deploy needs a rollback plan as concrete as a code deploy's
- Jan 06 Cloud cost attribution should be automatic, not a spreadsheet
2025 (38)
- Dec 23 Severity levels only work if everyone agrees on the definitions
- Dec 15 gRPC vs. REST for Internal Services: What Actually Decided It
- Dec 09 Treat the context window like a scarce resource
- Nov 25 Load test with realistic traffic shapes, not just volume
- Nov 12 API Gateway Patterns for Multi-Region Compliance
- Nov 11 A service with no clear owner accumulates the worst tech debt
- Oct 28 Synthetic data is a supplement, not a substitute
- Oct 21 Understanding PCA Before You Reach for Deep Learning
- Oct 14 Audit unused indexes as carefully as missing ones
- Sep 30 Embeddings drift when the underlying model changes silently
- Sep 23 Evaluating LLM Output Without a Golden Dataset
- Sep 23 Feature Stores: Do You Actually Need One?
- Sep 16 Quarterly access reviews catch what onboarding misses
- Sep 09 Where an LLM Layer Actually Helped a Recommendation Engine
- Sep 02 A dead letter queue nobody monitors is just a queue
- Aug 19 Track token usage like you'd track any other cost center
- Aug 19 Building a Recommendation Engine from Scratch: What We Underestimated
- Aug 05 Backpressure is a feature, not a failure mode
- Jul 30 Lessons from Moving 10+ TB Through a Redshift Pipeline
- Jul 22 A runbook nobody has tested is a guess with formatting
- Jul 08 Vector index choice matters less than metadata filtering
- Jun 25 Fine-Tuning vs. RAG: A Practical Decision Framework
- Jun 24 Canary deploys catch what staging can't
- Jun 10 Assume PII will end up in logs unless you actively prevent it
- May 27 Design for the dependency being down, not just slow
- May 14 Guardrails for LLM Applications in a Pharma Context
- May 13 Detecting hallucinations is a retrieval problem, not just a model problem
- Apr 29 Connection pool exhaustion looks like everything else
- Apr 15 Prompts are code and need the same review process
- Apr 01 Retries without jitter cause the outage they're meant to prevent
- Mar 21 Prompt Engineering for Internal Tools Is a Different Discipline
- Mar 18 Write the model card before you need to defend the model
- Mar 11 Building a Self-Serve Analytics Layer, and What Breaks First
- Mar 04 Data contracts between teams need a version, like an API
- Feb 19 Timeouts don't compose the way you would hope
- Feb 05 Chunking strategy matters more than the embedding model
- Jan 22 If everything is logged at ERROR, nothing is
- Jan 08 Feature flags need an expiry date
2024 (11)
- Dec 20 A postmortem that names a person has already failed
- Dec 09 Migrations should be boring
- Nov 25 SageMaker cold starts add up fast
- Nov 19 Hexagonal Architecture, Six Months In
- Nov 11 Idempotency keys are cheap insurance
- Oct 29 Scope tenancy at the data layer
- Oct 15 Add observability before you need it
- Oct 02 Version the contract, not the code
- Sep 23 What ClickHouse Taught Me About Read-Heavy Systems
- Sep 23 Multi-Tenant Data Isolation: The Boring Problem That Isn't
- Sep 20 Always plan before apply, no exceptions