I feel it made me better and other people worse.
GOOD:
I feel that I’m producing more and better code even with unfamiliar and tangled codebases. For my own side projects, it’s brought them from vague ideas to shipped.
I can even do analyses I never could otherwise. On Friday I converted my extensive unit test suite into a textual simulation of what messages it would show in many situations and caught some UX bugs that way.
Cursor’s Bugbot is genuinely helpful, though it can be irritatingly inconsistent. Sometimes on round 3 with Bugbot it suddenly notices something that was there all along. Or because I touch a few lines of a library suddenly all edge cases in that library are my fault.
NOT GOOD:
The effect on my colleagues is not good. They are not reading what they are creating. I get PRs that include custom circular dependency breakers because the LLM introduced a circular dependency, and decided that was the best solution. The ostensible developer has no idea this happened and doesn’t even know what a circular dependency breaker is.
Another colleague does an experiment to prove that something is possible and I am tasked to implement it. The experiment consists of thousands of lines of code. After I dig into it I realize the code is assuming that something magically happened and reports it’s possible.
I was reflecting on this and realized the main difference between me and my current team is that I won’t commit code I don’t understand. So I even use the LLMs to do refactors just for clarity. while sometimes my colleagues are creating 500-line methods.
Meanwhile our leaders are working on the problem of code review because they feel it’s the bottleneck. They want to make some custom tools but I suspect they are going to be vastly inferior to the tools coming from the major LLM providers. Or maybe we’ll close the loop and we won’t even be reviewing code any more.