Code reviewing was never the most interesting thing to do. But it had one important element. That, if done right, it was knowledge exchange between the reviewer and the coder. That can be quite motivating. Helping a fellow coder to become better. Reviewing "AI" written code does NOT come with that potential reward. The machine doesn't learn the way a human does. This turns code review into a menial, fruitless task that leads to frustration instead. That's my observation and opinion.

1/2

This entry was edited (1 day ago)
in reply to Tom

I'd say "inexperienced prompters" instead, as they might be good coders but prompting an AI to produce decent code is a very different knowledge domain that they may have not yet mastered, if that is ever possible. One change to the model and all your prompts might become useless again ;)
This entry was edited (1 day ago)
in reply to Furbland's Very Value = 71 Account™

@Furbland's Very Value = 71 Account™ @Evelyn Estelle @Tom @Jan Wildeboer 😷 I know experienced coders that use AI to leverage their work, even I used it many times with success. Thing is, if you don't know what you are doing you can't prompt it to get the right result and even checking the answer.
in reply to Furbland's Very Value = 71 Account™

@GroupNebula563 @dragonfi @Tom We are being mandated to use AI by our corporate overlords at IONOS which is "transforming to become an AI first company" and they are forcing that onto all companies under their corporate umbrella.

I've seen co-workers who used to be decent coders give in to the pressure from above and produce low quality slop as this is what the company mandates.

I commonly end up being the one who has to review that shit and it takes me multiple days to write down my remarks on code which took minutes to prompt into existence, only for my feedback to be fed back into the LLM which then generates new commits containing a whole new set of issues.

I've been doing that for a while now and my burnout symptoms are getting worse every day.

Next week, I will have to report on how I'm using AI and I'll have to tell them that I'm not using AI at all as I'm too busy reviewing the endless stream of low quality garbage produced by my co-workers.

reshared this

in reply to Random Host 🐕

@RandomHost
Solidarity with you on not using AI tooling at all despite it being mandated at my company where I've been for 21+ years.
I've been very open with my direct manager and peers from the outset that I won't use it for a multitude of reasons.
I'm not the only reviewer of everyone else's AI assisted changes, but it is wearing me down and making me sad to see experienced, smart folks start to accept the output and not carefully review it.
1/
@GroupNebula563 @dragonfi @jwildeboer @Tom
in reply to Roy

@RandomHost
Our ticketing system has a field for "AI Usage Percent" that is always zero for me.
I expect that field is tracked and in the near future my manager will start getting pressure.
I've let him know they will have to fire me because I'm not going to use it.

All that to say:
Condolences (as well as the solidarity). I hope you can find ways to improve your situation. You might be alone at your job but there are others standing with you.
2/2
@GroupNebula563 @dragonfi @jwildeboer @Tom

in reply to Random Host 🐕

@RandomHost @GroupNebula563 @dragonfi @Tom

What some places, like ours, have done is to respond to the code review being overwhelmed by the volume of AI slop by having AI do the code review.

Well that turns out to be a heck of a way to expand scope largely without bound, and add loops to software delivery pipelines, making it difficult to impossible to ever deliver anything.

in reply to Jan Wildeboer 😷

The second element I have heard a few times now: "AI" written code is not seen as "my" code by coders. They don't feel attached to it in the way they do with code they have written themselves. Hence they are not really "feeling" for it, so they are also not really interested in making it better or defending it in the review cycle. Just tweak the prompt and move on. This is having a real impact on motivation, discussion and results. It is hard to put in metrics, though.

2/2

This entry was edited (1 day ago)

reshared this

in reply to Ember is so tired of people. ​

I do think that "AI" generated code can teach some typical approaches to inexperienced coders. But that is merely the start of becoming a better coder. "AI" cannot find new ways, as it can only recombine what is in it's weights and data. @bicycletting
This entry was edited (1 day ago)
in reply to 𝔅icyclet𝓽𝓲𝓷𝓰

@bicycletting Even if it is possible to learn from generated code (I believe it is, provided you bring along some programming experience and general good taste), it makes little sense to go through code review rituals to do so. I think what @jwildeboer meant was that the reviewer is supposed to teach the author, not the other way around.
in reply to Hilko Bengen

What I meant is that after the coder, with the help of AI, has code that they already reviewed and tested themselves, sends it up the chain to the next reviewer who will typically decide if it is ready to merge or not. The learning effect can and should always go in both directions, ideally. An experienced reviewer can teach the coder new things but they can also learn new things from innovative code. Hope this helps! @bicycletting
This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

”Outsourcing your thinking is a fascist idea, because our power comes from thinking together.”
-Naomi Klein

youtube.com/watch?v=iEf-MNsyUi…

in reply to Jan Wildeboer 😷

Exactly.

I'm forced to vibe code at work and I said "ok, I will vibe code you a new app, but I won't touch the code even with a stick", I'm only reviewing for security issues and the tests.

Once in a week, I ran some prompt like "the users says it's slow", "a coworker looked at the code and find it ugly", and the LLM give improvement.

I can't care less about the code quality, because it's crap, once I ask a patch for a person all project, it give me 200 loc ... My fix was 12.

in reply to Jan Wildeboer 😷

A pattern with team members who are using "AI" to write their code. I would point out a few items that needed fixing. I would get back a new commit, that sure, fixed those items, but introduced a slew of new entirely unrelated items.

Turns out, they just went back to Claude and asked it to address the code review, which threw away the old commit and generated a new one. They didn't really even think about my feedback or how to incorporate it.

in reply to Jan Wildeboer 😷

one of the things I enjoy about writing code is the flow state you get when deeply exploring your understanding of a problem & solution. That makes all the other bits of the job worthwhile - even the tedious tracking down of the last few lines of code test coverage. Writing the PR is a concise reflection of that journey.

I can understand how losing those moments of productive flow to a machine would be highly demotivating. (Along with the mentioned lack of ownership/pride/care...)

Shred reshared this.

in reply to Jan Wildeboer 😷

Alternatively: 'Own' the app (rather than the code) and let AI deal with javascript (/typescript) fatigue? We work less for the other developers, but more for users?

When the crucial stuff is buried within framework internals or 2 GB of node modules, how much of the code is mine anyway?

Maybe the way web development has taken in recent years, agency was on the way out before AI already. <Humming "Bootstrap killed the CSS-star…"> 🤷‍♂️

This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

Just a remark: I tend to think that the "I am NOT my code" is the way to go

Code identification/possession (taking critics of code as critics to the coder/self), has much less merits than one may think

I like the Egoless code approach: it allows improvement to occur seamlessly

#egoless #softwarecraft #softwarecraftsmanship

This entry was edited (1 day ago)
in reply to Glyph

I now have, thanks for the link! It seems we agree that code review isn't really about code review but more about communication, feedback cycles and bidirectional knowledge exchange. I see good code review as the asynchronous version of pair programming, by the way ;) "AI" code breaks that. Maybe it would be better to establish prompt review instead?
This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

from my experience, architecture and testing knowledge become just much more important now. You look for (in)correct architecture, patterns and review the e2e/integration tests in AI code, which is more meaningful for the end user than the actual LoC anyway. It's surely another way to code, I'm not sure yet if it's good or bad, but surely not completely bad altogether. I won't stop caring for 'my' products just because most of the code hasn't been written by me.
in reply to Jan Wildeboer 😷

ADDENDUM: Thank you all for your insightful replies! Please don't stop sharing! I will take my time and put it all together in a blog post to have a permanent source. I will not directly quote replies without asking for permission first. It seems my post hit a nerve, which inspires me to dig a bit deeper going forward. (I also ignore the few replies with thought terminating clichés that try to deflect this productive conversation)
This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

I'm not a coder (anymore), but I would like to add that it's the exact same thing for text. I really can't be bothered to put my effort into creating a readable, understandable and enjoyable text out of AI slop. That's a waste of my time, energy and experience and whenever I was forced to do it, it felt like a little piece of my soul dying (which is why I've since started simply refusing to do it).
in reply to Jan Wildeboer 😷

Totally agree.

Another anecdote: a few weeks back I used the plan / code feature of Claude Opus to create a component which called a rather complex 3rd party API. Code looked great, but I realised I didn't even know how to invoke it for a test run.
Reverted back to reading the 3rd party API docs (which were good), then found lots of small loose ends in the generated code.

Mixed blessing, lots of boilerplate were done w/o any issue, but fixing & "making it my own" still much effort

in reply to Jan Wildeboer 😷

The media in this post is not displayed to visitors. To view it, please go to the original post.

There have already been more than enough studies that demonstrate, the more someone uses "AI" in their job, the worse and worse they become at their job.

We're SUPPOSED to grind over menial tasks, especially mental ones. That's what builds new and better pathways in our brains.

"AI" literally makes us dumber

in reply to Jan Wildeboer 😷

I think there are two ways to work with coding agents and not hate everything about it:

1) Vibe code, don't touch the code unless absolutely necessary. That's okay if you build prototypes or simply don't understand the technology you're using.

2) Go through every line, make small amendments, try alternatives. You make the code your own and are mostly still faster than without AI.

IMO passive reviewing doesn't work because the cognitive load is similar to doing it yourself but it's much more demotivating and you'll tend to just approve.

in reply to Jan Wildeboer 😷

If it's not an option to kick bots out entirely, one thing that's doable is to take PR feedback and shove it into AGENTS.md and docs linked from there. You *can* actually get the machine to "learn" repo conventions to reduce future PR load, even if the person piloting the machine stubbornly refuses to internalize any feedback.

(And you can throw tokens at this codification if you like).

I'm doing this on an internal project and it does seem to work a bit 1/2

in reply to Jan Wildeboer 😷

One problematic thing is that development teams on larger teams do not work as a team anymore. Everyone uses their AI that does random changes over all of the code base - no one is responsible anymore and owners of specific components get too many changes to review by others that did not even bother to review them. It does not work very well when your code base requires working as a team or multiple.
Bonus: LLMs only like their own changes - different LLMs change each others code.
This entry was edited (18 hours ago)
in reply to Jan Wildeboer 😷

Another story: A colleague had an issue to integrate a device into home assistant. He did not know c++ or how to extend home assistant. He managed to create something that worked. I asked him if we plans to open source is and he said no as he has no time to maintain it etc.
That means with LLMs a lot of things are reinvented in the most costly way and still less users would benefit from it (not everyone will fire up a LLM, but simply not integrate the device).
in reply to Kjetil Kilhavn

@kjetil_kilhavn
We've been experimenting with AI reviews and they do catch stuff but there are enough false positives that I'm not sure it's the timesaver it could be. If I could tune then down to just reliably catch the common gotchas of new contributors then perhaps it could take some of the load of the reviewers and leave them to concentrate on the wider architectural stuff.
@jwildeboer
in reply to Alex

@stsquad Yeah, when an experienced person reviews your code and finds something terrible, they'll report the terrible thing. If they don't find something they maybe start to complain about formatting or order of imports.

AI reviews flood you with such minor stuff and hide important findings among that noise. Like: Ah, look, there's dust on the doorframe, and you've left your socks lying around here again; there's a smoldering fire starting in the attic, and how many times have I told you that water droplets on the oiled kitchen countertop need to be wiped up right away?

@kjetil_kilhavn @jwildeboer

in reply to Kjetil Kilhavn

@kjetil_kilhavn that was my experience

The other devs apparently found my comments somewhat entertaining at least. Lately my responses are single words to each "point" the AI makes. It sucks at trying to interpret code but is okish at catching some basic lint errors and at noticing the occasional copy/paste error.

Drives me nuts at how padded out its comments are when most could be single sentences.

in reply to Felix Ungman

@nikodil Problem is that when the only thing visible for the reviewer is the output of a 3rd party tool (without input parameters and specs), it becomes really difficult to debug even with time and energy.

Code generation itself can be useful, but only if the model itself is generating consistent & predetermined output structure. LLMs mostly fail at both.

This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

When I started my first professional coding job the in-house development process included formal technical code reviews. We sat in groups of engineers, with assigned roles, and code changes were being read out loud. While it felt at times like an overkill it was a tremendous learning experience. Then we switched to git and PRs, reviewed remotely from the comfort of ones desk. Even without AI it was a huge step back. I saw it as a loss of knowledge sharing and quality.
This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

similarly with writing - working a lot with students and earliest career researchers who fight a lot with their papers, giving feedback is a way to teach to befome better (and usually takes longer than if I just wrote things myself), but what I get out of that is the happiness if seeing someone learn a become better. All this gone with AI generated or supported text, it's just and endless slog and I can just as well write myself...
in reply to Jan Wildeboer 😷

this holds outside of programming as well. Troughout all of "knowledge work", LLMs remove any motivation from the "producer" as well as from the reviewer. One is being judged by $NumberOfSuchAndSuchDocuments annyway, so there is an incentive to pump out more stuff rather than quibbling about its qualiti, also because the entire document development cycle is increasingly an LLMs producing slop that another LLMs reviews, then somebody signs off.

I'm sure this is fine

in reply to Jan Wildeboer 😷

To my surprise, Jan, I've seen exactly the same thing happen with #AI used to write legal #contracts. The decision made to "LLM a solution" often seems paired with a mental relegation of the process to some trivial, second-class, "close enough" mindset.
It's almost as if they've abdicated any responsibility for the deal's efficacy or quality, because they've used a tool. Even a bad tool.
in reply to Jan Wildeboer 😷

Thinking about code review responses from whole variety/spectrum of developer experience/skills/computer languages/industries & an analogy comes to mind:
- Code review went from clearly defined, human-centered, learning & tacit knowledge-transfer, expert-based process like pilots as a union:
- flying planes
- focus on safety (checklist, pilot equipment veto, etc
- training pilots
to
- code delivered in black bags, like refuse & sorting through the detritus & dross.
This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

this assessment is absolutely true. I think if we keep writing code with LLMs, doing code reviews doesn't make a lot of sense. I already see a major shift towards reviewing specifications that are used as input for LLMs instead. If you do this properly you still keep that communication up, it's a different language though and much more natural language and diagrams. If you also slop all of those up, you lose a lot of knowledge.
in reply to Jan Wildeboer 😷

saw a very similar take in @godotengine's blog recently:

> If your feedback on PRs is just being absorbed by a machine and not going towards mentoring a potential future maintainer, it becomes much harder to justify spending your free time on PR review.
godotengine.org/article/contri…

And… yeah, 100%. After many years of benefitting from what used to be unavoidable "side products" we finally "optimized them away", only to realize we might actually need them.
We'll probably experience a lot of problems of this kind in the coming years. :blobcatunamused:

in reply to Jan Wildeboer 😷

I don't (yet) have much to add in terms of practical experience here, but I found the following bit quite interesting.

The other day, I read the new contributor guidelines of @godotengine, and they contain an idea which I haven't seen elsewhere yet:

> » No AI-generated text in human-to-human communication
>
> When our maintainers volunteer their time to review your issue, PR, or proposal, they do not want to talk to a machine. This is a basic principle of respect.«

I imagine that if a human PR author always writes the PR description and replies to comments themselves, i.e. *without* using an LLM, it could perhaps reduce the frustration felt by the reviewer. In the best case, this "I will have to explain or defend the code generated using the LLM" approach might even create a sense of "ownership" on that code.

But for now all this is speculation. Still, as soon as I have to review LLM-generated code, I would like to try out this rule!

This entry was edited (1 day ago)
in reply to Jan Wildeboer 😷

I haven't read all the posts below, but as a translator I wonder if reviewing code is a learning experience as it is when reviewing translation. The beauty of reviewing is it's always instructive to see how a colleague overcomes a problem and there's always a learning point for the reviewer to pick up.
Whereas post-editing machine translation tends to be painful & frustrating.
in reply to Jan Wildeboer 😷

It will. One b/c learning what you like adds value and you’ll pay more for it.

Two b/c that’s how different AI vendors will provide value.

That is, now that all the StackOverflow-like low hanging (and unprotected) sources have been ingested, a key source for food will be interactions with users. Those knowledge basises will become siloed, sold to other vendors only at a high cost, and will encourage differentiation and respective specialization.

So believe me, building your AI context (“learning”) is THE most important feature going forward. My copilot instructions file is already worth a ton to me, and that’s the tip of the tip of the tip of the iceberg.

in reply to Jan Wildeboer 😷

poorly written code is a denial of service on the reviewer at the best of the time. When the original author is only passively in the loop, they abrogate responsibility for their own product and force ownership unwillingly on the reviewer. This easily leads to technical debt because you eventually exhaust the reviewer.

Adding machines into this behavior simply creates technical debt as a service.

in reply to Jan Wildeboer 😷

yes!!!

the improvement of individual coders and the overall improvement of the team and project are the wins in code reviews. AI will not get "smarter" and it won't get its morale or pride improved. code reviews of AI code are a vain attempt to catch crap code in the same way that bailing a sinking boat with a thimble is an attempt to not sink.

This entry was edited (2 hours ago)