Where AI actually helps my coding, as of February 2025
Copilot, Cursor's tab and a lot of copy-paste with Claude 3.5 Sonnet, written down because I suspect it will look very different in a year.

Every week someone on LinkedIn says AI writes 80% of their code. I don't know who these people are, but I'd like to write down what it looks like for me at the moment, because I have a feeling that in a year it will all be different and I'll have forgotten.
For context, I'm a front-end-heavy full stack dev. Most days are React and TypeScript, with some Go and some older code at work that nobody is keen to touch.
What I'm using
Copilot has been on in VS Code for over a year, doing autocomplete. I barely notice it any more, which I suppose is the point. I've also been using Cursor on and off, and its tab completion is better than Copilot's because it guesses the next edit, not just the next line: rename a prop in one place and it offers to fix the next three usages. I still can't decide how I feel about working in a fork of VS Code.
And then there's chat in a browser tab, mostly Claude 3.5 Sonnet and sometimes ChatGPT. That's where the bigger jobs happen, in a loop I suspect a lot of people will recognise. Copy code in, explain the problem, copy the answer out, paste, run, copy the error back in. It's clunky. The model can't see my repo, so I'm the one deciding which files matter and pasting them across, and choosing that context is half the skill.
Where it earns its keep
Tests, by a distance. I paste a component, ask for Testing Library tests covering the empty, loading and error states, and what comes back is mostly right. I would have written those tests anyway, just slowly, and on a Friday afternoon I might have quietly skipped the error state.
It's also good at regex and one-off parsing. Recently I needed meter IDs out of a messy CSV where some rows were quoted and some weren't, and a description plus a quick test on twenty lines got me there far faster than half an hour on regex101. Same with boilerplate: a Zod schema from a JSON sample, a typed fetch wrapper, the fifth form in an app that already has four.
The one I didn't expect is translating between frameworks. I spent a few years on Vue and Nuxt before React and still have Vue snippets lying around. Paste a single-file component and ask for a React function component, and it maps v-model to controlled inputs, computed to useMemo and watch to useEffect reasonably well. I tidy it afterwards, but the shape is right. It's a decent first reader for old code too. At work there's legacy Java nobody has opened in years, and asking what a long class does and what would break if I changed a method gives me a rough map I can then check.
Where it costs me
Made-up APIs are rare but expensive, because they look right. I once got revalidate: "on-demand" passed into fetch in a Next.js app. That isn't a thing. It compiled (the types were loose enough), it ran, and it did nothing at all, and I lost a good twenty minutes wondering why my cache wouldn't clear.
Stale Next.js knowledge is the constant one. The models have seen far more Pages Router code than App Router, so getServerSideProps turns up in projects with an app/ folder. Next 15 made cookies() and headers() async, and as far as I can tell most models don't know yet, so I've started opening every chat with "Next.js 15, App Router".
Long chats drift as well. Thirty messages in, it forgets the constraint I gave at the start (no new dependencies) or puts back a bug I already fixed. I start fresh chats a lot and paste a short summary at the top, which works but is all manual. And with React state bugs, stale closures, effects firing twice in Strict Mode, it tends to fix the symptom. I mostly use it as a rubber duck there: I ask it to walk through the render order, and I usually spot the problem myself while reading.
The bigger cost is quieter. When I write code myself I know why each line is there, and when I paste sixty lines from a chat I only know it passed the one thing I tried. So I've got a rule that if I can't explain a pasted block to a colleague without looking at it, it doesn't get committed. That eats into the time saved, possibly quite a lot of it.
Overall, on a normal feature it saves me a fair chunk of time, mainly on tests and boilerplate. On a bug in code I don't know, it's roughly break-even. On anything to do with Next.js caching or brand-new APIs it can be worse than nothing. Nowhere near 80%, but a fair chunk every day still adds up.
What I keep wishing for is something that can read the repo and run the tests itself, so I'm not the clipboard in the middle. Cursor's agent mode is heading that way and I keep hearing about tools that live in the terminal. I'll write a follow-up if one of them actually changes how I work.
First published on my blog. Cover photo: Markus Spiske markusspiske, CC0, via Wikimedia Commons (source).
About the author
- Full stack engineer in London with 5+ years on production web platforms. I lead AI-assisted modernisation at Xanda: React and Go for the UK energy market, a government claims portal, and moving old Java and C++ systems onto the cloud. Outside work I run a small home server behind a Cloudflare Tunnel with a handful of public tools on it: Doorstep (rental alerts across Rightmove, OnTheMarket and OpenRent), SeenSooner (NHS A&E and planned-care waits), GridPulse (live GB grid carbon), Sift (LLM ticket triage that survives model failures) and AI Radar (a news digest written hourly by an n8n workflow). I write here about React and Next.js upgrades, Node, coding with AI agents, and the CVEs I've had to patch. Originals live at blogs.kishankanejiiya.tech.
Comments
Join the discussionNo comments yet. Be the first to comment.




