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