A couple weeks ago, I permanently signing off from my desk 39 at Policy Expert. A few hours later I jumped on a plane to Thailand to celebrate Songkran, the local new year, which feels fitting before a new start. After a few days in Bangkok I travelled down to the Koh Samui island and laying on the beach you can do one of two things between dips: scroll, read or reflect. I used my reflecting times to revisit conversations I had, observations I made and articles I read. I came to a conclusion: AI will not replace software engineers.
Now, how I could I say that without having deeply immersed myself in using AI tools beyond prompt-based tools like Gemini, Grok and Perplexity? Observations were my starting point. I noticed that talented engineers would second guess themselves even on the simplest tasks and refactoring asking Claude and similar clients what to do. More often than not that process would take dramatically longer than just writing the code a few times to shape the target solution of the hour. I thought I was the only one noticing this but I am now seeing more and more articles sharing a similar pattern.
But I can see a valid use case that I intend to trial by using an actual coding agent. I have a side project on which I use a variation of the Uncle Bob’s clean architecture. In short my code is organised so that my core logic remains separate from “framework” code like Spring boot’s controllers or my DB integrations. This enables me to replace frameworks without needing to ever touch the domain logic which is the valuable part of my software.
For example when I built the prototype for that side project, I didn’t want to use AWS yet to iterate faster. My original framework code would write data to local files on my machine. Then the second it I decided to test it in the cloud and replace the generic filesystem class with one writing files to S3. Eventually as my requirements evolved I ended up swapping that framework code to write to a postgres-powered RDS.
A short yet insightful experiment
Replacing a framework would take me up to 3-4h manually. I feel like this sort of work can be done in an instant with an coding agent that understands enough context from my codebase.
But first I want to trial this with the implementation of an interface to check something can be consumed then consume it in a separate method. I want this data to be stored and retrieved from my database.
I first tried setting up a Cline account but since I’m in Thailand I can’t create an account as I need to receive a text message. My UK provider has no coverage on Koh Samui. I assumed giving my email address away was sufficient so the need to provide and confirm my phone number killed my interest despite a promising landing page.
Then I set myself up to use Gemini 2.5 with the Cline plugin within IntelliJ which was fairly straightforward. From there I wrote the following prompt:
Based on how my other DB-related repositories are implemented give me the plan to implement JdbiOrbsRepositoryAdapter alongside matching tests that reflect my coding style in this repositoryThe first iteration yielded code which had the right classes and even generated a somewhat decent flyway migration script for the new table. Still the code did not compile as the agent hallucinated properties and enum values that did not exist. It took another 2 prompts and specific instructions to get something that compiled and did what I wanted. Since my confidence in AI-generated code is lower than a 15yo intern’s code I review it accordingly. Overall this still cost me a good 30 minutes. Last I implemented a similar change I was 90% of the way within 15ish minutes then I would spend a few more minutes cleaning up.
Sure it’s only Gemini 2.5 but since I’ve been hearing talks of AI replacing Software Engineers within 6 months since at least 2023 I feel like validating my assumptions against a model from March 2025 is fair game. And obviously, the more time I spend with it to define rules in an AGENTS.md file the better it will get. But, when you write code manually or as the youth say, braincode, the rules you’d put in there are already in your brain. You rarely need to remind yourself of these. Plus the more context you add, the more expensive using the agent gets. For now these are virtually free but I don’t believe this will last forever. Someone will eventually need to pay for these increasingly more expensive GPUs.
Final thoughts
The bottleneck for me isn’t the coding but the reasoning to make the software as maintainable as possible while delivering a requirement. This part takes the same amount of time whether you use a coding agent or not as you still need to do it yourself. You will still need to think about the cost of delivering your solution, whether it is expandable, observable and so on.
I still remember the time where teachers at school would tell me about Rational Rose and how it would remove the need for software engineers as code would be generated automatically from diagrams. Over the past twenty years I’ve only seen Rational Rose used once. And it was me trialling it to understand its use back in 2010. Since then it was superseded by another IBM product before being discontinued in 2025.
At least, neither IBM nor your mind could possibly trick you into believing Rational Rose could think. However, you can have the illusion that AI models and agents do think. From that point onwards there is a dangerous temptation to outsource your thinking to something that cannot think. We already started seeing the result of that hitting even giants like Amazon getting outages. The software engineer is the one doing the thinking or at least should be.
Those who keep doing so will be safe but those who stop will disappear. Since thinking is the actual job of a software engineer my point still stands. AI will not replace software engineers.

