There has to be an in between with ai coding

8 min read Original article ↗

Realizing I am not competent yet, and coding with AI isn't going to get me there.

I have gone back and forth over the last year or so when it comes to coding with AI. I am only a junior backend web developer, and part of me does feel robbed when it comes to my learning and my career development. I would feel more excited about AI if I got my 10-15 years of mastery first. (Not to mention the potentially millions of dollars)

But unfortunately, I got my first dev job in May of 2024, right when AI started getting decent. Don’t get me wrong, I am extremely grateful for the fact that I have a job and that I get to do what I love every day.

When our company first got Cursor, it was about a year into my employment, and I was pretty pumped about it and quickly got comfortable with using it to code with/for me. It was only a couple months in that I realized that I hadn’t coded since getting Cursor and I felt a little pang of guilt. I was worried about my skills going through atrophy, forgetting how to deeply understand the codebase or how to problem solve, etc. So I tried to do more hand coding and more low level CS learning on the side.

I went back and forth between the state of accepting AI as the future and being excited about it, and feeling that guilt about not learning as much as I used to. Fast forward to beginning of 2026, and our company got Claude Code and moved off Cursor. When the developers on my team got their hands on it, we all had a pretty serious 2 week existential crisis when we realized that AI was planning with/for us, creating our issues, writing the code, testing the code, helping review the code, etc. So if it was doing so much of our jobs, what are we good for? That is how it felt at least during those two weeks. After a couple of months though, we all kinda just settled back in and realized that we are for sure still needed because we have to direct and correct Claude so often, and we all saw the bottleneck move from code to review and release processes.

We only probably increased in speed give or take 50% when it comes to total issues merged.

Again, during the last 6 months or so I have gone back and forth, continuing to occasionally feel those pangs of guilt about not learning as much, not hand coding, not truly understanding the code that I am “writing”. But I kept just coping and telling myself, “This is the future and the skill of writing code by hand is dead and worthless and won’t be needed so stop worrying about it, lean in and enjoy using AI and building fast.”, which did help for awhile.

I have loved all the new tooling around AI, I have a home server running herdr that I can use my phone to code with CLI agents, it really is amazing! I really have leaned in and built my entire workflow around AI agents.

Until just recently, things were going great. But I ran into a wall. My job so far since getting hired has mostly been updating old code to new updated, modern standards. Recently, I have worked on a large migration that included APIs as well as migrating actual production data from one database to another. I had done the bulk of the research and learning about this task before we got Claude, so while using Claude, there were many times I would have to remind claude of something it forgot to look into, and I could be confident in my critiques of it’s decisions because I had the full context of the code base and the overall task in my head.

Towards the tail end of this migration, I had to set up a pubsub. Now, I had never worked with pubsub. I knew what it meant and the basic idea around it. But in order to implement it, I could just tell claude, “Hey we need to implement pub sub like have done in other areas.” and for the most part, it got it done.

But I noticed something weird when I went through this implementation. First, there were a couple of embarassing moments when I was asked why I did something a certain way, and I really didn’t have an answer. It was because Claude did it that way. I couldn’t explain myself. And other times when I would get asked questions about the code and I had to ask Claude to answer the question and I realized I had a hard time really consuming Claudes answer in order to respond without just pasting back claudes response back to my co worker who asked the question. I didn’t like being basically incompetent in those moments, regardless if Claude can write all the best code in the world, that wasn’t fun. I also realized that even though I had merged in an implementation of pubsub that worked and satisfied the requirements, I learn absolutely nothing about pubsub. That was sad to me.

Fast forward a bit, now that I am finishing up on this migration, I am going to go into another migration. (yay!) And when I first started to do the research and discovery for this new migration, I had the thought that this was going to move so much faster and smoother now that I have Claude to help from the very beginning of the migration! I started to ask Claude to dig through the code, start writing up an overall vision document and a large over arching plan to reference as we go throughout this migration. And as we (Claude) researched, I noticed it was really hard to read its responses and have my brain really soak it all in to the point I felt confident in my understanding of the code base. And even if I could soak it all in, can I trust that it’s research is thorough enough that I can be confident in my corrections and direction later on as we are actually implementing this migration? You already know the answer is NO. I cannot be confident in my understanding enough to correct claude, or even to feel confident merging in code it writes in the future if I don’t have a thorough context of the code base and the data I am migrating.

After going through these last few experiences with feeling incompetent and not learning, I have really come to the conclusion that there has to be and in between with AI. Obviously we can’t go all the way back to writing all the code by hand, it would take ages, and there are expectations of a certain level of productivity inside most everyones employers. So writing the code by hand may be not that valuable anymore (even though I miss it dearly), but I can’t just stay in the Claude CLI only, I have to be in the code.

I have seen some developers on youtube proposing a hybrid of agent CLI work inside of Neovim so you are still in the code, and that may be a decent way to go about it.

But the bottom line, at least for junior and mid level devs, is that we need to find a way to use AI, but still learn at the speed we would have if we didn’t have AI. There are so many areas of software development that I don’t deeply understand because I am mainly just writing APIs and database adapters. I have almost no deep understanding of code organization/abstraction, and almost zero understanding of low level engineering.

I think this is where the industry might be going. Instead of us getting trained on the job and moving up over time, it might become an industry that has a pretty high skill requirement, like you only get hired if you are mid level and above. That would leave the resposibility of learning to be a mid level engineer on the shoulders of the actual engineer.

I really don’t have a conclusive answer or direction to be honest. I am just voicing concerns I have had recently and I think there is a high chance that other, younger developers have been noticing this same thing in their work.

P.S. You probably are already aware of this, but just remember that when you are reading the blog or watching the youtube video of engineers who are explaining their perspective of AI and coding, that most of them have already gone through the mastery and received the millions, so yeah they can afford to let go and enjoy coding with AI. They already have the money and the knowledge. (Primeagen, Mitchell Hashimoto, DHH, Mo Bitar, etc.)