Every few months a new tool promises to change how I write software, and most of them change nothing. AI coding assistants are the first ones that actually did — just not in the ways the marketing suggests.
I use them daily now, across a full-stack job: React and Next.js on the frontend, NestJS and PostgreSQL on the backend. Here's the honest split of where that time actually goes.
Where it earns its place
Boilerplate with a known shape. A NestJS module with a controller, service, DTOs, and a Prisma repository is the same five files every time. Writing that by hand is typing, not thinking. Letting a model draft it and then editing the business logic is a straightforward net win — no different from a good code generator, except it also handles the boring naming decisions.
Reading unfamiliar code fast. Dropped into a legacy module with no comments and inconsistent naming, asking "what does this function actually do, and what calls it" gets me oriented in a couple of minutes instead of a couple of hours. This is the underrated use case — not writing code, reading it.
A rubber duck that talks back. Explaining a bug out loud (or in a prompt) forces me to state my assumptions, and half the time I find the bug while explaining it, before the model says anything useful. The other half, it actually spots something I missed.
Where I don't trust it
Anything touching authorization or money. If a change decides who can see or do what, or touches a financial record, I write it myself and read every line twice. The failure mode for a wrong if statement in a permissions check isn't a bug report — it's a security incident that's already happened by the time you notice.
Architecture decisions. A model will happily suggest a plausible-sounding pattern without knowing your team's constraints, your deployment setup, or the decision you already made and rejected six months ago for a reason nobody wrote down. It's a good sounding board for architecture, a bad source of it.
Anything I can't verify quickly. If I can't run it, test it, or reason through it myself in under a minute, I don't merge it just because it looks plausible. Plausible-looking wrong code is the actual risk here — not obviously broken code, which gets caught immediately.
The pattern that's held up
The honest summary: it's very good at collapsing the distance between "I know what I want" and "the boilerplate for that exists," and it's no better than a search engine at "I don't know what I want yet." Most of the productivity gain is in the first category. Most of the marketing is about the second.