Kuga

Writing

Notes on AI engineering, multi-tenant SaaS, and shipping solo.

Solo shipping is choosing your debt deliberately

Shipping fast isn't picking speed over quality. It's picking which debts to take on, which to refuse, and naming the cost upfront so the bill doesn't surprise you later.

Why I built a config registry instead of writing more controllers

When your business changes rules faster than engineering can deploy, the right move isn't to ship faster — it's to take engineering off the critical path.

I paused a working SaaS in production. Here's the math behind the call.

Elite Varan still runs at elitevaran.com. The platform works, the architecture holds, the kundali engine ships. I stopped actively building it anyway. Here's why — and why "knowing when to stop" is the founder skill nobody puts on a slide.

How I use Claude Code in production every day

AI-native isn't "let the AI write the code." It's a workflow with specific shapes for specific tasks — and a list of things I never delegate.

Forced tool use — getting Claude to return structured output that's actually reliable

Asking the model nicely for JSON works in demos and fails in production. Forced tool use is the pattern that turns 'usually returns valid JSON' into 'returns valid JSON or fails loudly.'

Budget guards — what a Friday-night LLM bill taught me about treating model calls as untrusted services

An LLM call without a cost ceiling is a denial-of-wallet vulnerability. Here's what one weekend of unbounded API calls taught me, and the small set of guards I now run before any AI feature touches production.

Evals as a deploy gate — the small harness that catches what "looks right" misses

Tests check that your code does what your code says. Evals check that the model does what the product needs. They're different shapes, and treating them as the same is how AI features quietly degrade in production.