I spent yesterday debugging a payment flow that an AI assistant confidently generated for me. The happy path? Flawless. The part where a user's card declines mid-transaction and we need to retry with exponential backoff while logging to three different services? The assistant completely missed it and didn't even flag that it was skipping anything.
It got me thinking about where these tools actually excel versus where they consistently fall short. They're genuinely exceptional at scaffolding, at spinning up the obvious structure of a feature. But the moment you need to handle what shouldn't happen race conditions, partial failures, the weird state your system ends up in at 2 AM they seem to lose the plot entirely.
Nobody browsing a site sends a HEAD request, which is why this sat there for months with every check I had staying green.
HEAD is meant to be GET without the body, so one URL cannot honestly answer both ways. Mine did. 253 pages answered 200 to a normal request and 404 to a HEAD: the whole template matrix, every guide, four hub pages and the API reference. My framework matches a route against the method list that route declares, and those declared GET alone. An undeclared HEAD matched no route at all and fell through to the 404 handler.
The clients that send HEAD are the ones asking whether a page exists rather than asking for it. Link checkers. Uptime monitors. Shared caches revalidating a copy they already hold. That last one is what made this expensive rather than untidy. Those pages are served with five minutes of freshness and a day of stale-while-revalidate, so a cache is invited to keep them and check back. A 404 to that check is not a slow revalidation, it is a discarded copy.
So here is the check, and it is about two minutes. Take ten of your own URLs, ideally ones written at different times, send each a HEAD, and compare the status against a normal GET of the same address. Anything that disagrees is broken for a class of client you will never see in analytics, because none of them run JavaScript and most never appear in a session count at all.
There is a strange paradox with productivity software: we spend hours migrating notes or task lists to a new platform just to get a temporary wave of motivation.
The issue is that the setup process itself feels productive, but after a fortnight the novelty fades and you're back to the exact same workload. Unless an existing tool has a severe performance bottleneck switching usually creates more friction than real value.
I did a quick audit of my reading apps last weekend and deleted a backlog of over two hundred articles I saved over the past year.
I realized I kept installing new read-later utilities hoping a nicer UI would fix my reading habits. I dropped all of them and started keeping a dead simple text document on my desktop for links I actually plan to finish during the weekend.
Having just two or three links on a clean document makes it way easier to focus compared to a massive app inbox.
What setup has actually worked for you to keep your saved reading list manageable?
I've gone back and forth between these two more times than I should probably admit.
Coda always pulls me in because I can make tables, buttons, little automations, etc. It's fun until I've somehow turned a simple notes system into a project of its own.
Then I go back to Notion because I just want to write things down and find them later.
And then, inevitably, I miss something Coda did better.