Writing
Notes on what broke, and what I built to understand it.
Write-ups from running tunyt and Tixin, and from the small versions of other tools I've built. RSS
Harness engineering is not a joke. I have the failed runs to prove it.
Building mew · 2026
I built a coding harness in six hours and it beat my tools on small tasks. Then I tried to shrink its context, lost, tried again, and gave it a bug that would take me two hours by hand, and lost that too. What I tried, what failed, what I did next, and what I still haven't won. · 5 min
I built a coding agent in six hours. It argues with me the way I argue with myself.
Building mew · 2026
mew is a harness built around one person's way of working. One agent writes, one criticises, one judges, and most of it runs on the cheapest models that can do the job. What six hours of building taught me, what it costs in tokens, and what I haven't proven yet. · 6 min
People said my photo was AI. So I built a camera that can prove it wasn't.
Building Veris · 2026
A real photo of mine got called fake, and I had no way to prove otherwise. Veris is the camera I built in response: it signs every photo inside its own hardware and anyone can check it on Ethereum in under a second. The decisions behind it, the trade-offs, and the problem no camera like it has fully solved. · 4 min
I spent a whole night looking for money that was never missing
Incident · tunyt's second event
At tunyt's second event, three people paid and never got their tickets. I fixed that by hand. Then Razorpay showed money our dashboard didn't, and I spent the night in a spreadsheet I didn't know how to use. The decisions that caused it, the one that saved the customers, and how we reconcile now. · 4 min
The obvious fix would have worked. That's why I didn't take it.
Incident · July 2026
In July 2026 one dashboard with fourteen queries saturated tunyt's Postgres. Adding an index would probably have made the graph go green. Instead we put budgets around the whole database. The seven decisions, the maths behind them, and why I'd make the slower call again. · 5 min
We gave users a choice. That was the bug.
Product decision · 2026
The hardest problem on a recent tunyt event had no stack trace. Nothing crashed, every line of code did exactly what we wrote, and people still got stuck. Four decisions about team payments, why we made each one, and the one we got wrong. · 5 min
The most dangerous change I ever shipped was a cleanup
Incident · 1 May 2026
On 1 May 2026 a one-line tidy-up moved our queue sweepers into startWorker(). CI was green. Thirty seconds after the deploy, production was gone. Why the change looked right, why CI couldn't see the problem, and the question I ask before every change like it now. · 4 min
The bug that scared me most never reached a single user
Near miss · early tunyt
In tunyt's early days, during our own testing, an event dashboard showed one host another host's data. The application code was fine. The bug was a regex in an nginx cache rule, in a layer that didn't exist on my laptop. How I looked in every wrong place first, and what I believe about caching now. · 4 min
I'll never read most of the code tunyt runs on. Here's how I sleep anyway.
How we work · 2026
Four engineers, a mobile app, a web app, a CRM, AI infrastructure and design, all at once, with coding agents writing a lot of the code. Reviewing everything was never going to scale. Writing my judgment down did. The decisions behind that system and why each one exists. · 4 min
Answering out loud in four Indian languages, in under 200 ms, on 512 MB
Build · 2026
A voice assistant that answers questions in four Indic languages, grounded in real documents, inside a 200 ms budget, on a free server with 512 MB of memory. Why the fast path never generates, why retrieval uses two kinds of search, and what "speculative" means here. · 3 min
Why I ran a ticketing backend on two Raspberry Pis
Load test · October 2025
Tixin, the pilot that became tunyt, ran on a Kubernetes cluster I built by hand on two Raspberry Pi 5s, and held about 16K requests a second in a load test. The decisions behind it, what CQRS really costs, and why the number I'm proudest of is one I refuse to quote as capacity. · 4 min
Our traffic grew seven times and we got faster. I don't fully trust that.
Measured · June to August 2026
tunyt went from 69K to 485K requests a week while latency nearly halved and the error rate fell from 2.84% to 0.32%. What we measured, how to read those numbers without fooling yourself, what we changed, and the claim I refuse to make. · 4 min
I trained an AI to lie to another AI
Build · OpenEnv Hackathon India 2026
PHANTOM is an environment where an AI defender contains a live breach while an adversary AI feeds it fake security logs in real time. Why the attack goes through the logs, why both sides learn at once, and why I used GRPO, a curriculum and an LLM as the judge. · 3 min
The scarcest thing we own is a database connection
How we work · 2026
On tunyt the resource that has hurt us most isn't CPU, memory or instances. It's database connections. Why Postgres makes them scarce, the one equation that explains every rule we have, and four decisions that fall out of it. · 4 min
I trained a language model that writes by filling in blanks
Build · 2025
Most language models write left to right, one word at a time. I trained a small one on my laptop that starts with a sentence of blanks and fills them in, all at once, a few at a time. How masked diffusion works, why it's awkward for text, and why I trained it on a laptop at all. · 3 min
The bug where nothing was wrong
How we work · 2026
No error, no alert, no failing test. People just saw old ticket types for up to ten minutes. Why cache-aside breaks in the writer you add six months later, the race most people never notice, and the decisions we made about caching on tunyt. · 4 min
I keep building worse versions of software that already exists
Builds · 2025
Redis in Go, a load balancer in Bun, a gRPC mesh, an SFU, a small OS in C. None of them will ever replace the original, and that's the point. What I choose to rebuild, what I refuse to, and what it changes about how I run tunyt's stack. · 4 min