AI Wins and Losses

Published on
AI Wins and Losses

I’m going to be honest. Up until the start of this year (2025), I didn’t give AI or LLMs much thought when it came to coding. But this year marked a change for me.

Before AI (2006-2024)

As I wrapped up my time at Google in 2024, my experience with AI coding was that it was at best a semi-intelligent auto-complete; sometimes guessing what I wanted and other times suggesting something random and useless. I still searched Google and read Stack Overflow posts for answers related to coding questions. For my contracting work, I wrote code and worked like I always had. It worked well, as it had for the last 17+ years.

However, one thing that I’ve appreciated in all my years as a software developer is that there’s always something new to learn. As I was looking for work and new opportunities early in 2025, it seemed like a good idea to learn how to use LLMs in my work.

This year I have learned how to integrate LLMs into my work in helpful but not mind blowing ways.

After AI (2025-????)

Early in the year, I signed up for a Claude Pro account and started using Gemini Code Assist for side projects.

Claude and Gemini have been my go-tos for answers to coding queries. There’s part of me that’s sad for the demise of Stack Overflow, but I can’t argue with how useful it is to get overall high quality short snippets/examples when I’m exploring some new API or language feature.

This has been my biggest use of AI during the year - I’ve really ramped up on TypeScript and React, and part of what’s helped me do that is getting instant examples and guidance for places where I need to learn more.

I still refer directly to documentation, like the TypeScript handbook. My goal is almost never to get code to copy/paste into the IDE, but to learn and grow in understanding of the topic area.

Win #2 - better than a rubber duck

The idea of rubber duck debugging is a common one in software development circles. Basically as you explain your problem to even an inanimate rubber duck, you often come to some new insight into the problem area that you’re explaining.

LLMs can take this to another level, and even offer good suggestions about alternative paths to explore. I’ve had both Claude and Gemini help to identify tricky logic errors in code that I had stared at for quite a while on my own. Yes, they do tend to go down wrong paths, but if you can steer them away from there they can be really helpful.

Overall having a screen sharing session or otherwise working through a problem with a co-worker is probably better (you both have a chance to learn, bond over shared experience, etc) but LLMs as debugging aids can be truly useful.

Loss #1 - rabbit holes

Now, if you do happen to follow an LLM down one of the wrong paths mentioned above … well, it can be tough. It’s different than going down a rabbit hole of your own creation because this time you have a virtual assistant continually coaxing down the wrong path.

This happened to me once when I was trying to untangle a build failure in a system that I was unfamiliar with. I took the advice from Claude (which seemed reasonable) and it wound up leading to quite a few hours spent going down the wrong path.

So this is what the other side of using an LLM as a debugging tool looks like. If you don’t have the domain expertise to sense that things are going wrong, you’re in for a frustrating ride.

Loss #2 - vibe coded cruft

Although I’ve mostly written my own code, I have experimented with using LLMs to write code here and there. Sometimes it’s helpful, but for anything that I care about the “vibe coding” approach (where you just take what the LLM gives without review) is not useful.

I’ve seen it introduce needless repetition and go off on refactoring “side quests” that wind up making the code worse, introducing bugs or sometimes all of the above.

Vibe Cruft

I will say I’ve found the “vibe coding” approach useful for small throwaway-ish scripts where I can describe the input and what I want for the output and let it do its thing.

Closing thoughts

I appreciate the place that LLMs have taken in my software development toolbox. Early on in my career, I used just the vim editor and Python to do web development. Over time I’ve grown to learn other languages and tools like IDEs.

Using LLMs feels like an extension of that, for now, in the way I use them.

I do suspect that they will continue to improve and automate away more coding tasks, and possibly coding jobs. But honestly the best coders/engineers I know are not the best solely because of the code that they write but because of the team players that they are, the ideas that they share and challenge and the grit and passion that they bring to their work. I think those things will continue to be valued even when those engineers are writing less code and the LLMs are writing more.