It’s 8:30 am. You roll out of bed, make your coffee, sit at your desk. You stare glumly at your screen, a list of tickets on one half and an empty prompt box on the other. You open your terminal out of muscle memory…then close it again. You yawn, peer blearily, and type “ok chat i need to stop the bug where the user can see all their prjects on the projet pag even if they are deacivated”. Enter. You don’t even go to investigate the problem, or try to parse the logic in your (admittedly trained) squishy mammalian brain. You don’t even run the codebase locally. After 10 minutes GitHub’s co-pilot has opened up a pull request, all tests passing. An AI agent has run through a pull request review for you already. All that’s left for you to do is run through your own review; but who are you kidding, the code obviously works (all my tests are green!) and the code looks right. LGTM. Merge. Next ticket.
This future sounds miserable to me, with no joy in sight. But, why? After all, my workday is now easier – the dream! When I first started programming, I couldn’t believe that a person would actually sit down and write thousands of lines of what appears to be nonsense – how tedious! How boring! Isn’t it amazing that something can just do all the busy work for you, and create a shiny end result, without having to actually sit down and write it? I think I know enough now to argue, no. No this isn’t the dream. In fact, it has the potential to turn into a nightmare, if you let it.¹
I’ve been working on an AI product at Revelry for a couple of years on and off now, so it’s my job to be plugged into the latest and greatest things AI can do.² This has meant that slowly, before I figured out how to re-centre myself (so zen I know), AI began to rob me of my joy and my passion for programming. It began to minimize the bit I love the most (cascading small solutions into large functional pieces of software) and maximize the bit I like the least (issue lifecycles, reading other people’s code and debugging code I swear I didn’t write).
So, how did I pull myself back from the brink of AI burnout and bring that joy back? How did I maintain my sanity in an era when the emergent properties of what is essentially an auto-complete on steroids can write more lines of code, faster, than I ever could? If you’re in the same boat I was, here is my advice to you. Your mileage may vary (depending on if this is a Terminator or a WALL-E timeline).
Learn how to solve the problem, even if you don’t have to. The point of technology is to use your body and brain less, and get the same or better results. The same is true for AI: when I’m writing a reduce, or a complicated regex, I can simply prompt the AI and plug in what gets spat out. So why even learn what all the symbols in a regex mean, or learn what a reduce is in the first place? In reality, AI doesn’t get asked ‘hey how do I do this thing’, it gets told ‘hey solve this problem’. And if the solution happens to contain a regex, and I don’t know what that is…I might just plug it in anyways. In other words, your brain happily embraces the reality that you don’t have to solve the problem at all. What’s the point in practicing a problem on Leetcode to keep your skills sharp, if AI can simply produce the correct algorithm on demand? This isn’t just true for software – education, and other professions that require vast amounts of continuous education, are having the same crisis.
But, for now, the AI isn’t perfect. It gets the solution wrong, all the time. It can make up libraries that don’t exist, or mock out key functionality just to get tests to pass. But there’s no guarantee that will be true forever; it seems as if bastions of AI denial fall every day. But I also don’t guarantee that will change anytime soon – how far can the emergent properties of an autocomplete on steroids really take us? And so, my advice in these uncertain liminal times is this: bother to learn how to solve the problem anyway, even if you use AI to solve the problem first. I offer this piece of advice for two reasons:
Firstly, there’s something magic about using a keyboard and your brain to solve problems; while the end result is hopefully nice, I have a theory that that’s not the reason why the majority of us do what we do. There’s something deeply satisfying about being given a problem, and solving it, then finding the next problem and solving that one too. It feels very much like you’re Matt Damon in The Martian – you keep solving problems, and all the solutions stack on top of each other, until eventually you have exactly what you wanted. Product owners are generally thrilled at the result; but I think that programmers conversely revel in the process. In a nutshell, coding solutions to problems is fun.
Secondly, if we are truly headed for a world where more and more of our daily work becomes AI generated, you are going to have to become really, really good at code review. As already mentioned, most flagship LLMs can write more lines of code, faster than you ever could. Sometimes, these lines just produce big bugs; other times (again, only sometimes) they produce large, working, solutions. But no matter whether the solution works or not, if you can’t understand the problem, you can’t review the code; and if you can’t review the code, your codebase is probably going to be a big entropic mess.
Reading code that you have used AI to generate is in my opinion the hardest code to review. It takes real, conscious effort. Reading other people’s code can be tedious and difficult, because you have to absorb both the code and the context. Reading your own code that you have written is even worse, because there’s a nasty tendency to not actually read what you’ve written. But reading your own code that you’ve generated means you get the worst of both worlds: you don’t read what you’ve written AND you might not have absorbed the context (and the AI might not have either).
There’s joy to be had as a programmer in 2025. It is really harder than just typing in a prompt and then making a pot of coffee, despite what the AI zealots might shout. But to maintain that joy, and to maintain your sanity, you have to fight human nature: if there’s a shortcut that exists, our lizard brain is going to want to do that instead. If I have a backache, I should exercise: stretch, strengthen my core, maybe even fix my posture. Or I could take a painkiller. If I have a software bug, I should work to understand the context around it and debug it: or, I could use AI to fix it for me. I think this metaphor actually works on another level too – debugging and exercise are generally exhausting, and sometimes unpleasant, activities. But it’s almost always worth it to go through that pain to get to the end goal on the other side. Both give a pleasant buzz when you’ve finished the task, and both lead to improvements, either in understanding how your app and the stack work, or in your day-to-day performance or pain level.
Let the doomers doom, and the vibers vibe, and forge your own path in-between. The worst thing you can do right now is bury your head in the sand and not use AI at all. If the last model you engaged with was GPT3.5, it’s high time to use AI again. Use it to speed up your workflows, use it to write your regexes and SQL queries, but please, read all the code you produce: even if your eyes try to skip whole code blocks in self-defence ³ The ability to reason about systems and read code thoughtfully will both help you stay relevant as a developer and keep you sane. Most importantly, it will keep your brain engaged and learning how things work and how the problems are solved. That’s probably where you experienced joy before AI; it’s probably going to be how to experience joy afterwards too.⁴
¹ This is not even counting the fact I can’t use emdashes anymore because otherwise people think it’s AI generated 😔
² The AI hype will continue until moral improves
³ Shoutout to Terry Pratchett GNU for crafting sentences I can only dream of
⁴ I am in no way legally culpable no matter your level of joy