I've been building software for twenty years and the last twelve months have been the biggest shift I've been through. Not because AI is doing the work for me, but because it's changed the shape of nearly every hour I spend at a keyboard. Here's the honest account of what's different.
Code generation is real and it isn't quite what people picture. I don't ask Claude to build me a feature. I ask it to scaffold something with a known shape, a Postgres migration or a React form or an API route, and then I edit it. The value is in the seventy percent that comes back roughly right. The skill is knowing which seventy percent that is.
It's changed what boilerplate means. A year ago boilerplate was the slow part of building a feature. Now it's the part I hand off while I'm still thinking about the design. The thinking has moved earlier, into the shape of the thing and the edge cases and the harder question of whether it should exist.
Reviews have changed too. AI is genuinely good at telling me what I missed in a two hundred line diff. I run my own pull requests through Claude before I open them and ask specifically about security, edge cases and inconsistent naming. It catches things. Not the deep problems, but enough of the surface ones that what I ship is cleaner than it used to be.
Documentation is probably where it's changed most for me. I used to write docs afterwards, badly, and only when somebody asked. Now I generate a first draft from the code, cut it down, and ship it alongside the feature. It went from a chore to something that just happens, which on its own is worth what I pay for the tools.
What hasn't changed is the design work. The thinking. Deciding what's worth building, who it's for, and what happens when it goes wrong. AI has made execution much cheaper and made no difference at all to the strategic calls, which arguably makes those matter more now that everything around them is faster.
The thing I'd warn people about is using AI as a substitute for understanding. The worst code I've seen this year came from teams using models to write in stacks they don't know. It'll happily generate an answer. It won't tell you whether that answer suits your codebase or your stack or your scale, and that judgement is still yours.
If I had one bit of advice for anyone building right now, it's to use the model heavily, check it heavily, and never ship anything you couldn't have written yourself. I suspect that still holds for whatever it turns into next year.