# Yassir Manaf > Engineering that ships. AI that works. ## Posts - [Fine-Tuning vs. RAG: How I Actually Choose](https://yassirmanaf.com/fine-tuning-vs-rag/): Most teams reach for fine-tuning when they need RAG, and RAG when they need fine-tuning. Here's how I actually make the call. - [LLM Agent vs Single Call: How I Decide Before Writing a Line of Code](https://yassirmanaf.com/llm-agent-vs-single-call/): Most teams reach for agents too early. Here's the decision framework I use to choose between an LLM agent and a single call — before writing a line of code. - [What Building a SaaS for Non-Technical Users Taught Me About Product Assumptions](https://yassirmanaf.com/building-saas-non-technical-users/): I built a SaaS tool for people who'd never used software like it before. Everything I assumed about onboarding, features, and UX turned out to be wrong. Here's what I learned. - [How I Audit an AI System Before It Goes Live](https://yassirmanaf.com/ai-system-audit-production/): Most AI systems pass the demo but aren't ready for production. Here's the six-area audit I run as a fractional Tech Lead — and the gaps I find in every system. - [Prompt Injection Production: 4 Critical Attack Vectors and How to Defeat Them](https://yassirmanaf.com/prompt-injection-production/): Prompt injection is easy to miss in testing and dangerous in production. Here's what it actually looks like in a live LLM system — and the layered defenses that catch it. - [RAG in Production: Beyond the Demo](https://yassirmanaf.com/rag-production/): Every RAG demo works. Production is where things fall apart — quietly, in ways that are hard to debug. Here's what I've learned building RAG systems that actually ship. - [Structured Outputs with LLMs: Moving Beyond Raw Text](https://yassirmanaf.com/llm-structured-outputs/): I spent two years writing regex to parse JSON from LLM responses. Structured outputs ended that. Real before/after from a production pipeline — metrics, tradeoffs, and the failure modes that don't go away. - [Multi-Tenant LLM Architecture: Isolation Patterns That Actually Work](https://yassirmanaf.com/multi-tenant-llm-architecture/): The first time a tenant's prompt leaked into another tenant's context window, I found out from a support ticket. Here are the multi-tenant isolation patterns that held up in production — and the ones that didn't. - [LLM Caching in Production: The What, When, and How](https://yassirmanaf.com/llm-caching-production/): Caching LLM responses isn't like caching a REST API. The inputs are fuzzy, the outputs are non-deterministic, and most traditional strategies break. Here's the caching hierarchy I built in production — and the traps I walked into along the way. - [How I Scope and Run Fractional Tech Lead Engagements](https://yassirmanaf.com/fractional-tech-lead/): Running a fractional tech lead engagement is not consulting and not freelancing. Here's how I scope, price, and run them — and what kills them early. - [When Vector Databases Are Overkill](https://yassirmanaf.com/vector-database-production/): Before you spin up Pinecone, read this. Most production RAG systems don't need a dedicated vector store — and the operational overhead costs more than the query bill. - [AI Observability Production: The Stack I Actually Use](https://yassirmanaf.com/ai-observability-production/): Standard APM tools miss the failures that matter most in AI systems — the ones where infrastructure is healthy but the model is wrong. Here's the observability stack I built to catch them. - [How I Think About Context Windows in Production LLM Apps](https://yassirmanaf.com/llm-context-window-production/): Every token you send to an LLM costs money, adds latency, and past a threshold, degrades quality. Here's how I manage context windows in production — and why bigger isn't better. - [I Built Conversational AI in 2017 — Here's What I'd Do Differently with LLMs](https://yassirmanaf.com/conversational-ai-production/): built production conversational AI in 2017 using Rasa, spaCy, and hand-coded dialogue flows. Here's what broke, what held up, and what I'd do differently with LLMs today. - [Azure AI Cost Optimization: Where the Money Actually Goes in Production](https://yassirmanaf.com/azure-ai-cost-optimization/): The Azure OpenAI bill surprises most teams. Not because of the obvious costs — but because of the ones nobody documented. - [LLM Output Validation in Production: What Actually Works](https://yassirmanaf.com/llm-output-validation/): Raw LLM output breaks production systems in ways that have nothing to do with hallucination. Here's the validation stack that actually works. - [What Rasa Production NLP Taught Me That LLMs Still Can't Replace](https://yassirmanaf.com/rasa-production-nlp/): I built production NLP systems with Rasa before LLMs changed everything. The constraints Rasa imposed — on intent design, training data, and dialogue control — still apply today. - [Event-Driven Architecture with Kafka: What the Tutorials Don't Tell You](https://yassirmanaf.com/event-driven-architecture-kafka/): Kafka tutorials show the happy path. This is the other one — the production failures, the trade-offs, and the honest answer to when you shouldn't use Kafka at all. - [How I Debug Distributed Systems Without Losing My Mind](https://yassirmanaf.com/debug-distributed-systems/): Distributed systems fail in ways that are hard to reproduce and harder to explain. Here's the debugging workflow I've built from years of production incidents — no tools survey, just what actually works. - [Prompt Engineering Is Not a Skill. It's a Process.](https://yassirmanaf.com/prompt-engineering-process/): Most teams treat prompt engineering as a creative act. It's not. Here's the repeatable process I use to version, test, and improve LLM prompts in production. - [Why I Stopped Trusting ORMs for Complex Queries](https://yassirmanaf.com/orm-vs-raw-sql-production/): Entity Framework is the default. It's also the source of most database performance fires I've debugged. Here's when the ORM loses and what I reach for instead. - [What I Learned the First Time I Ran an LLM in Production](https://yassirmanaf.com/llm-in-production/): The first time I ran an LLM in production, nothing worked the way I expected. Here's what actually surprised me. - [API Versioning in Production: What Nobody Tells You About Breaking Changes](https://yassirmanaf.com/api-versioning-production/): API versioning sounds solved until you break a consumer in production. Here's what actually matters when you manage versions at scale. - [Why I Chose Simplicity Over Engineering at Banking Scale](https://yassirmanaf.com/simplicity-over-engineering/): Every architecture decision I've regretted had the same root cause: complexity I didn't need. This is what I learned building backend systems at a Canadian development bank. - [How I Structure .NET Solutions for Long-Term Maintainability](https://yassirmanaf.com/dotnet-solution-structure/): he .NET solution structure decisions you make on day one don't hurt on day one. They start hurting around month six. Here's what I enforce on every project. - [Message Queues Production: Why They're Not a Silver Bullet](https://yassirmanaf.com/message-queues-production/): Adding a message queue feels like a safe architectural choice. Here's why it's not a default — and what the tutorials don't tell you about running them in production. ## Pages - [Writing](https://yassirmanaf.com/writing/): AI in Production Builder Stories Engineering Decisions - [Privacy Policy](https://yassirmanaf.com/privacy-policy/): Comments When you leave a comment on our site, the data entered in the comment form, as well as your IP address and browser user agent, are collected to help us detect spam comments. An anonymized string created from your email address (also called a hash) may be sent to the Gravatar service to check whether you use it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After your comment is approved, your profile picture will be publicly visible alongside your comment. Media If you upload images to the site, we recommend avoiding images containing GPS coordinate EXIF data. […] ## Optional - [Agent (MCP protocol)](websites-agents.hostinger.com/yassirmanaf.com/mcp) [comment]: # (Generated by Hostinger Tools Plugin)