Someone young not in the software business recently asked me if I use AI in my work. My knee-jerk reaction was “no”: I don’t trust the AI agents running amok in my codebase. I’ve tried it, and it often feels like herding cats, unless your prompt is perfect and you managed to take everything into account, which isn’t possible. But then I started backing off, as there are of course nuances to this: it’s not all-in or nothing.

IDEs have been doing auto-completions for years now: originally they would suggest you existing variable names and only if your code was syntactically valid. Then they’d learn to see past simple syntax errors and would start suggesting variable names even if the code didn’t compile. The next step was when they started to suggest names for new variables as you were creating them: if you were assigning an instance of a ShoppingCart class into a variable, they’d suggest a good name for the variable would be shoppingCart.

This way the IDEs have slowly evolved over the years, and now that they have AI-assisted auto-completions, you don’t even think you’re acting with an AI. If you’ve just written three null-checks for different variables, you already expect the IDE to suggest the next line should be a null-check for the fourth variable. Sure, sometimes the suggestions can still be bonkers, and I usually cancel the suggestion without reading it if it’s over three lines, because their reliability seems to drop in proportion to how long they are, but they are getting better all the time.

Now that I’m AI-assisted, can I achieve more than I used to? That’s really hard to say, because how do you even measure a developer team’s or an individual’s performance? You’d also need to normalize the measurements somehow to cancel out your natural growth and the kinks of each individual project, as no two are the same.

My old classmate from university, startup entrepreneur Otto Hilska recently put it well in his LinkedIn post:

Measuring Al coding tool productivity hits the same hurdles we’ve faced in developer productivity for a decade.

Well-meaning and easy-to-measure metrics turn out to be misleading.

When someone says that Al writes 90% of the code, it may sound like you can now reduce your engineering headcount by that much. But that’s not what it means.

In reality it doesn’t matter who wrote the code. Someone had to understand the context, drive the process, and check the work. Al likely saved you some time from writing the code, but the Al didn’t do it by itself.

This is true: for me to fully understand the code, it needs to flow from my brain through my fingers into the system. If I let an AI agent write my code, I still need to spend possibly an equal amount or more time to understand its solution. If I don’t do that I can’t claim ownership of the product of that process. A comment by Asko Saura to Hilska’s post was also very insightful:

The main outcome of a development effort isn’t the software. It’s the team’s capability to sustain and evolve it. […] If your team disappeared tomorrow, would you still have a product? In most cases, no. You have archaeological artifacts. You’d need to rebuild a team before you could even deploy it, let alone maintain or change it. […] What matters is whether the team can maintain accountability at whatever level they’re operating. If they understand and own the AI output, the AI is just a sharp tool.

This hadn’t occurred to me before, but now it’s clear to me that Saura is right: the team is the most important part of the process. If there’s no team, the software is doomed to decay. “Finished” software will eventually succumb to some kind of rot when its environment invariably changes over time.

Returning to the original question of using AI at work, there are other ways for programmers to use AI besides code generation. I actually often hash my ideas for architectures or processes with some LLM. You could say ChatGPT (or just “Chad") is my new go-to rubber duck. The AI assistants can also be helpful with deciphering certain cryptic error messages, and so on. And if I were to make, say, some throwaway script in some language that I’m not so familiar with, I’d use Chad to create one for me for sure.

So in the end it turns out I’m actually using plenty of AI, but it has just snuck in to my processes so organically and little by little that I don’t always even notice it. And what’s “artificial intelligence” anyway? When new AI technologies become commodities, I, for one, find myself mentally pushing the “intelligence” bar higher and higher.

Once, people thought that once a computer learned to play chess, it would be intelligent. Well, Deep Blue beat Garry Kasparov, but only through sheer computational superiority and with some relatively simple min-max-algorithm, so that milestone was quietly abandoned. Now, Chad passes the famous Turing test, but is it still intelligent? No, it’s just really good at statistics. Chad is still essentially just a glorified T9 text predictor, albeit approximately a gazillion times more complex.

As a final remark, this person with whom I talked about AI mentioned they’d taken a basic programming course at the university but learned basically nothing, as it was way too easy to just have Chad do all the homework assignments. My initial reaction was that that’s kind of really sad: where do we get new programmers now? But, thinking about it, I do believe that there are young people with curious minds who will want to know how all the apps work under the hood and who will still learn the trade properly. In some sense I still feel fortunate to have learned programming the hard way. We didn’t have the internet when QBasic was still a thing, and even in the university in the first course we were expected to use only Emacs to write the code.

But far be it from me to be a gatekeeper: if people can use Chad to achieve cool stuff and get some feelings of accomplishment in the field of programming, go for it! If one pushes their ambitions far enough, maybe they’ll learn something about programming almost as a byproduct.