May 20, 2026 • Author: Vitalik

LLM can't reflect for you

Don't use AI when you don't know what you're doing. Seriously. You rob yourself of struggle. And you're likely causing a mess without knowing it.

Our family dog forces me on at least one walk a day. Usually my mind spontaneously drifts into some weird "deep mode" where I unintentionally get insights.

That was one of those days. I got a bit of AI psychosis after watching Karpathy's interview and decided that I need to at least try AI with HandsOnMoney. First things first — I spent a couple of days on a pretty decent plan for Claude. Then I hit my quota after Claude worked for about 3 hours to implement a new feature in HandsOnMoney. It stopped on the last step — wiring all the pieces together. I decided to finish it by hand since it involved a lot of UI work and judgment calls. Then I found myself on a walk, thinking about storing quotes. Why the hell did Claude store it as numerator and denominator when my database design uses minor units and precision?

I believe every developer has this gut-feel when something is off. That was exactly my mood when I fixed a trivial UX inconsistency. It's this kind of painfully unproductive day when you don't want to code because everything feels odd. And everything was odd:

  1. A field name on the Prices table was wrong — price. Why is it price? Why not rate? Currencies are commodities too. But then what does it mean to have a rate for stocks?
  2. That weird denominator thing. How the heck am I going to calculate it? What the heck is it actually — a leetcode problem?
  3. A function that pulls all the prices into memory to find the latest price for every commodity. "Claude, what the hell? We are on iPhone — not on a server."

While it was easy to fix the in-memory join and naming, the second put me into deadly analysis paralysis. These are all judgment calls. No AI can make them for me — the only thing I can task it with is research. So I dug. How do other systems implement the same functionality? I dusted off forgotten pieces from my past: the FIX Protocol, TradingWorkstation APIs, market data feeds. Nobody uses the GnuCash approach with numerator and denominator. After all, who in the world would set the denominator to anything but a decimal? Gotcha — Claude brought me the answer: stock splits. And the GnuCash first release was 1998, three years before American exchanges fully adopted decimal prices.

Long story short — Claude did a good job. It did exactly what I asked it to do. What it didn't do was make me reflect while implementing the feature. That "something is off" gut-feeling would have probably surfaced the moment I worked on the table design, rather than after the feature was already built. It's truly a genie — it will do exactly the thing you asked for. But coding is not a straight translation of an idea into code. It's a way to sharpen your idea, through reflecting, doubting, and all the painfully slow things we developers do — struggling over the right variable name, premature optimization, you name it. Coding is more like writing than mechanical number crunching on a TI-85.

So am I going to use AI? Absolutely. Am I going to make it implement core functionality? Hell no. I have to struggle through it to build something that lasts. Claude is amazing at doing things I would have avoided before. Unit tests? Claude will do it in 10 minutes. Rewiring an existing module from direct DB access to the application layer — sign me up.

P.S. Spotted em-dashes? I used Claude to fix typos, commas and mistakes. Every piece is my lived experience.

P.P.S. Here is that good boy who causes deep thinking.

Good boy