{
  "slug": "harness-matters",
  "title": "The harness matters",
  "description": "The model isn",
  "url": "https://tanveerriaz.me/blog/harness-matters",
  "datePublished": "2026-06-20",
  "markdownUrl": "https://tanveerriaz.me/blog/harness-matters/index.md",
  "jsonUrl": "https://tanveerriaz.me/blog/harness-matters/index.json",
  "text": "Building HalalEats SG with Cursor and Claude taught me something I already knew from banking delivery, but hadn't said out loud about AI: the model is a component, not the product. The harness at work - it reported what it did, and what it deliberately did not do. What \"the harness\" means The harness is everything around the model: the repo structure, the RAG pipeline over 3,500+ MUIS-certified spots, the FastAPI backend, the Next.js chat UI, the deployment on Railway, the eval checks before you ship a prompt change. Swap Claude for GPT tomorrow and HalalEats still needs the same harness. Swap the harness and the best model in the world won't save you. Workflow beats model selection Most of the daily work wasn't \"pick the smartest model.\" It was: ingest data cleanly, chunk it sensibly, retrieve the right context, format the answer for Singlish and English queries, handle edge cases (closed restaurants, ambiguous locations), and ship without breaking the chat flow. That's workflow engineering. It's unglamorous. It's what separates a demo from a product. Practical test: If you changed models today, how much of your codebase would still matter? If the answer is \"not much,\" you don't have a harness yet - you have a chat window. Tools and context are the moat Cursor and Claude Code didn't replace thinking. They accelerated the loop between spec, code, and test. The moat for HalalEats isn't \"we use Claude.\" It's certified data, retrieval quality, Singapore-specific UX, and a feedback loop from real users asking \"halal makan near me\" in plain language. Same pattern in enterprise: the moat isn't which LLM API you call. It's your data boundaries, approval flows, audit logs, and how agents hand off to humans when confidence drops. Ship the harness first My rule: get the thinnest end-to-end slice working - user message in, verified answer out - before tuning the model. HalalEats shipped chat-first because the harness (RAG + UI + deploy) mattered more than perfect prose from the model. Polish the model after the harness proves the job-to-be-done. Next time someone asks \"which model did you use?\" - ask back: \"what harness did it run in?\" Also on LinkedIn →"
}
