Akash DahadProduct engineer · India

Engineering blog

Explainers in plain words, and field notes from building an AI platform: what we picked, what broke and how we fixed it, with the numbers.

Vector search and RAG

Explainer · 10 min

What is RAG, in plain words

Why an AI model can't answer from your company's documents on its own, the eight steps RAG uses to fix that, and where each one quietly goes wrong.

Field notes · 7 min

Why we moved AI search from Postgres to LanceDB, and what broke

Why our AI search slowed as customers grew, why a hosted store didn't fit, how to move without betting on one database, and what we found after the switch.

Field notes · 6 min

Choosing an embedding model: why leaderboards aren't enough

Why a leaderboard can't tell you how a model will do on your data, and how to design a fair test: realistic questions, one change, a blind judge.

Opinion · 6 min

pgvector vs LanceDB vs Turbopuffer: when each one makes sense

We've kept our vectors in all three. What each one is, where it runs, how you pay, and the questions that should decide between them.

Field notes · 5 min

Hybrid search: why rank fusion flattened our scores

Why keyword search still earns its place next to vector search, why rank-only fusion flattened every score to about 0.031, and what we replaced it with.

Field notes · 4 min

The recall you lose to compressed vector indexes

Compressed vector indexes are fast but can miss the right results. Our recall@10 fell to 0.29 on large tenants, and a refine step brought it to 0.83.

Field notes · 6 min

How to test a RAG system: score every stage

Our AI answers counted wrong answers as successes. Why end-to-end checks hide that, how to score each stage of a RAG system, and why tests must start clean.

Field notes · 4 min

Why AI agent loops get expensive, and how we halved ours

Our deepest AI answer mode cost more than it billed. Why an agent loop costs more every round, how we found it, and how a cap and a cache cut the bill.

Field notes · 4 min

Caching AI answers: why question text is the wrong key

Why an AI answer cache keyed on question text misses repeats, what our cache's records showed, and how to key on the retrieved documents instead.

Field notes · 4 min

Two prompt tricks we didn't ship, and how we knew

Reordering prompts for caching and adding few-shot examples both made our AI answers give up more often. Why scoring each stage made both calls obvious.

Kubernetes and cloud cost

Explainer · 10 min

Kubernetes in plain words: nodes, pods and how big to make them

What a cluster, node, pod and deployment are, what requests and limits really do, and why to size pods from measured load instead of expected load.

Explainer · 6 min

What is KEDA? Kubernetes autoscaling that can go to zero

KEDA scales Kubernetes workloads on queues, schedules and other events, down to zero pods. How it differs from the HPA, and which work belongs on it.

Field notes · 5 min

Why CPU throttling hides behind a calm CPU graph

A CPU limit is enforced every 100 ms, but graphs show averages. Why throttling hides, how to measure it, and how fixing it made our extraction 14× faster.

Field notes · 6 min

Running a database on Kubernetes: what changes when a pod holds data

Kubernetes' defaults assume any pod can be thrown away. Why that breaks for a database, how we ran LanceDB with that in mind, and a checklist for your first.

Field notes · 3 min

Shrinking Docker images: find the dead weight first

Why our images grew past a gigabyte, how we found what nothing used, and why smaller images made deploys, pods and CI faster.

Field notes · 4 min

A GPU only at night: why batch embedding belongs on a queue

A GPU rented all day sits idle, and live questions barely use one. Why queued night work suits a per-second GPU, with a hard budget and a CPU fallback.

Opinion · 5 min

Cloud cost is a product problem

Our platform was sized for thousands of users and served 30 to 100 a day. Why infrastructure cost is part of the product, and how to find what you overpay for.