Hate might be a strong word. I don't see myself as a hater and I'm sorry for leading you wrong with the title. I think I'm more of a disdainer, does that word exist?
Since the first models capable of coding started to appear, I felt this disdain from people that were using it. "Like, why are you guys cheating? It's so much more fun to play the game." You have to understand that this comes from someone that actually enjoys coding, that goes home after a developer job and codes for fun.
My initial reaction was that this feels like cheating, feels like you don't have control over what you produce, and in this line of work, this means something will come back to bite you. Just like in early 2010's blindly accepting a StackOverflow response. Should you do it? No, but sometimes you're in a hurry or just feeling lazy, what hurt could it do? Turns out, a lot, so to me AI wasn't different and then the rumours of dumb responses started spreading. AI can't count how many r's are in strawberry, what? How can you trust it to build good code? I'm much better then it.
Just like port wine, it got better with age
Suddenly it got better. All development influencers were sharing it everywhere, specially on YouTube. Dedicated tools for coding with AI were starting to grow. Cursor was making a fortuned based on promises that now were actually being delivered. Claude Code. Copilot. Cheaper models. Chinese models. Open source models. Running coding models on your own machine. Kaboom.
Every developer was getting their brains melted. Some were jumping head first, others were keeping 100% away from it, and a third group, just like me started getting curious with something that couldn't be ignored anymore. Is there actually any value of using AI as a tool?
Small starts, bye bye repetitive tasks
My first usage of AI in my code were code completions. I would swear by it while still hating on AI. For me there was actually a big value of code suggestions by AI. Suddenly an entire if condition could be just a tab press, accepting the suggestion. That already made my development go faster, and I felt more productive while keeping the fun part of making the logic puzzle work. It's not cheating if I was going to write it anyway, right?
Then I started asking AI for help debugging some errors at work. It was more helpful then loosing hours on a search engine looking for the right answer, or just the right group of words that points you in the right direction. It could search for you, take your context into consideration and even explain why the error is showing. Again, I was going to find the answer on my own eventually, right?
So to me, it started to form a clear pattern of what AI could be useful for. Making me more productive by helping me with the right tasks, that would take longer time if I do it by myself, but the fun parts, the ones that are fun no matter how long they take, it wasn't replacing those.
This would be the case, and still is the case for me. I even developed this analogy with mathematicians and calculators (which I thought I was so clever to come up with that, but I've seen it online so many times now, and even some of my colleagues came with that analogy as well, it just shows how linear that chain of thoughts is, and I no smarter then anyone, ouch, my ego), that is just a tool you still need to know how to use it and how the result that it shows you came to be.
A project from scratch (with AI)
I think it's been two years in this limbo against AI, but using it "legally" as a tool by my own definition. Here is where everything changes, I was sick of database tools. Used TablePlus for many years, paid for it every year, but I started using a combination of Linux and MacOS, and TablePlus for linux was not that good. Turned to JetBrains and before I committed, used the non-comercial version of DataGrip which works exactly the same on both OS.
To be quite honest, it wasn't for me. I'm not a fullstack developer anymore, mostly doing frontend, and from time to time some backend task. That said, I do use databases a lot, just not in a deep way. Changing values here and there for testing purposes, running some queries, looking for specific user unencrypted user data, and so on. DataGrip was far too feature rich for my use case.
"Why don't I use my ChatGPT plan, paid by the company, to create my own database manager fully tailor made to my needs and tastes?", yes, obvious answer. I installed ChatGPT locally... I know, it sounds crazy that I didn't have it yet, but to be fair I was avoiding using non-european AI tech as much as possible, but the company I work for offered us a paid plan on OpenAI, better to take advantage of that.
I also had this feeling that I was getting left behind, and since the beginning of my career I understood that is very important to at least know why the trend is trending, and experiment with it. If it doesn't go anywhere at least I learned something new, if it goes somewhere then I had the advantage of knowing how to use the trend and what to use it for.
And this is how I decided to create my first project where I would not develop 95% of the code.
The journey, the learnings and the ugly
I can spoil you that at the moment I have the database app of my dreams, still have some couple of features that I could implement that would improve it a bit, but right now it has everything I need.
It still feels bad to say it, but I touched 5 lines of code maximum. I was "cheating" the entire way. Didn't want something of a particular color?, prompted it on Codex, some time later, boom, it's done. Need an extra feature to duplicate rows? Ask it and you'll have it. Review it in a working app and keep on improving the functionality. I had a clear vision of what I wanted, right before I started I could see it in my head, colors, sizes, look and feel, everything. Where the sidebar would be, where the tabs would be, all of it. Made it much easier asking for what I wanted.
One thing I learned is that it can still be fun, I had lots of fun actually. I didn't had the kind of fun I had when I learned to code, like this logic game of coming up with expressions that together make an input or a box behave the way you wanted. The kind of fun I had was watching my creation grow, of starting with a base, and then keep on adding on it. Thinking "oh, this could be very helpful if this does that" and then asking AI to make it and showing what I envisioned 3 minutes later. I was not the developer anymore, but I was the architect and it's a lot of fun being the architect.
A friend of mine looked sad the other day when we were talking about the advances of AI and how much less we code by hand. I understood exactly what he meant because I felt the same. Like me, he was not in development just because of the payment (not that that's a problem), he started coding because it was fun, and he was sad reminiscing the old days where coding and putting together conditions and loops was part of a whole puzzle, and coming up with that solution was rewarding. This project just helped me realize that one day, maybe sooner then we want, that will be completely gone, that feeling of eureka on a monster SQL query will be gone.
Doesn't stop being scary. I'm still scared for my job, but this experiment helped me relax a bit. Being good is not just producing perfect code, it's decision making as well, what features are good or bad, it's the sensibility to understand that tiny changes matter for the product. Being a good architect is not that easy for a machine, at least I hope it's not.
What's ahead in this dark tunnel?
No, I won't just yipikaye the projects from now on. I had fun as an architect, it was way more fun then I anticipated, but I was doing it for fun, and for learning purposes, and out of curiosity on a zero stakes at risk project. In the back of my mind, there was still doubt as I didn't check the code at all, specially the rust part which I never used before.
The way to go should be something like reviewing the code at each step, every single line after it produces and tune and tweak afterwords, and don't get lazy reviewing it, which is a task that sound so monotonous. I think I'll let it code for me at work, more and more but baby steps, on small features or small changes to see how it behaves and how is implementing the things I'm asking. Guiding it every step of the way and reviewing the results afterwords.
Welcome to the age of baby sitter developers.