I'm going back to coding by hand
I have a successful app I built myself with a solid user base. I had been working on a new version via Claude on and off for about six months
In work we use LLMs exclusively. Nobody writes code anymore. It's all hands off and we have a high level understanding of how things work but no more than that.
When it comes to my side project, I was adding features at breakneck speed with Claude but I realized I have no clue how the new code works or what it changes or breaks. I spent many years of my life working on this project and I don't want to turn it into another vibe coded black box, especially without an org of other engineers to help.
So last night, I abandoned my Claude branch with all the fancy new things and started hand coding again.
It was very very satisfying. Sure, there was monotony. I changed some variable names and I had to chase down all the places they were referenced, comment out tons of stuff to get things working and then slowly bring it back in, but it felt like coming home to an untidy house after living in hotels for half a year, and starting to clean up. Yeah there's work to do, but this place is mine. My own. I know where things live.
It's given me love and energy for the project again (at least for now, I hope it continues!) and I'm delighted to say I took a good look at code I myself had written pre Claude and I still found many ways to write it better, refactor, make it more readable and efficient. I haven't forgotten.
If anyone is feeling the despair of not coding anymore, stairs you're losing your edge, I would suggest you ditch Claude for a few days at least and see how you feel. Your mileage may vary, but it's given me back something I thought was gone forever
Coding used to be fun when in use to write things by hand, the complete project mental model was always used to there in mind. With LLM output has increased but that end to end mental model is lost. Nowadays I look for smaller tasks which doesn't touch multiple things and use them as treat to do my hand.
Unfortunately I can't do that. My projects are too big now. In fact, this is how I deal with projects: I build the base manually and then I can iterate with AI faster once the fundamentals are solid. Sometimes the AI tends to forget those fundamentals or tries to change those and add unnecessary stuff on top. If I stay invested in what the AI is doing, I can usually spot it and nudge the AI back to sanity.
That is how I think it should be done.
>I build the base manually and then I can iterate with AI faster once the fundamentals are solid.
I've had tremendous success with this approach as well.
I still make time to write code by hand.
But I think it's really about finding the right abstraction. As a staff or principle engineer in the beforetimes, I also didn't understand most of the code being written by the org. I dove in where needed, but more importantly I found the right layer to understand what was going on - dependencies between teams and services, data flows and data models, etc. And where I found myself most effective was when I was shaping and understanding those effectively.
It's the difference between doing something and asking for something to be done.
Forget all the technology involved. One of them is yours, you made it and know it. The other one is something you bought.
Quite literally, something phoned in.
I'm not. I just don't want to implement code for reading files, setting up and population databases, logs, etc. manually anymore. I want to automate boilerplate, the occasional frontend code, etc. and focus on the parts that are interesting for me. This way I can get things done that I wouldn't otherwise.
I hope I never have to use your software
Did the same. First few days was like learning to walk from scratch again. Welcome back, programmer.
> I changed some variable names and I had to chase down all the places they were referenced,
$ find . -name '*.c' -exec perl -i -pe 's/\btheOldName\b/theNewName/g' \{} \;Any half decent IDE will change them automatically for you, no need to chase them down. Just look at the git diff if you want to see where things changed.
Yeah this is a very very common and fundamental operation in programming. Always use the “refactor” tool in your IDE instead of trying to change every instance of a variable name by hand.
It’s like using a linter: you do it because it’s the right thing to do and doing it without the tool confers no benefit and is prone to error.
Not using an IDE in 2026?
Welcome back and godspeed.
i think its important to do that as you might lose your skills if you only use AI!
Power to you!
I started building a Claude which retains some brain power. After each pass it ablates a function or a portion of code and forces you to write it out by hand. My hope is that I can get something that deals with boilerplate and makes me focus on the interesting stuff. We'll see.
not going to easy after using agentic ai, as mind get used to it .not easy but best of luck.
Welcome back! Despite all the prophecies of doom and gloom, little has changed.
You can still very much get ahead by working smarter not harder, even when working with your hands
Goog for you!
It's a common complaint that people lose control of their codebase using LLMs. It always strikes me as odd, because this is a choice you make when you use the tool.
You don't have to just give it a task, let it do whatever it wants, then accept the result. You can tell it how to do things. You can read the changes. You can ask it to do things differently.
You choose to relinquish all control and then complain that you don't like not being in control. It's all about the level of involvement you choose for yourself. It's not all or nothing, you don't have to go full vibe coder it's a spectrum and you choose where you want to be on that spectrum.
I don't think anyone chooses to relinquish all control from a project they've worked hard on. It's a slippery slope. You start with allowing it to help out a tiny bit, being in control and understanding the code the LLM writes, and then you become more confident in the results, and you trust it, and you don't read every line, and before long its refactoring an entire file by itself and you're not reading it.
And then you look up one day and you don't recognise the codebase
I'm able to avoid slipping down that slope, just don't be lazy. If you look up one day and don't recognize the codebase that's because you haven't actually looked at it in a long time. Obviously when you don't pay attention you miss things. Just pay attention, it's not hard. There's plenty of time for it while Claude or whatever is working through stuff for you.
Even with manual reviewing, most of its changes will look relatively reasonable when approving every chunk... until you come across one that doesn't, and then it'll be a neverending chain of 'wait why tf does it do this? Why does it work this way?'
Honestly, this is less of a problem with LLMs than with some colleagues I've had.
This is not a problem I've had. I know roughly what I want before I ask for it, I make sure the result is roughly what I expected. Some times if I'm not entirely sure what I want I'll ask it to plan the change or suggest some approaches etc then choose the one I prefer.
For me it works great. My judgement is that I get things done significantly faster, and generally with comparable or better quality than I would doing it manually. It's important to lay a good foundation, if you are careful with the broad strokes it helps the LLM lay the rest down more consistently. It's also a lot easier to refactor things when the need becomes apparent.
So do you make the LLM restrict its output to small, individually-reviewable chunks per PR?
I generally prefer small increments yes but I don't shy away from larger changes where necessary. Just like everyone hated reviewing a 4000 line PR before LLMs, we all still hate it now, provided you actually do review things properly and not just tell Claude to do it or skim it lazily.
I wouldn't say I make the LLM restrict it's output, rather I'd say I just don't ask for a lot at once. If I want to create a new page in our web app I'll split it up into multiple tasks - create the new page with the required layout and add it to the navigation. Create a new component we need for this page, put it on the page so it can be tested. Create another component. Add an endpoint to the API for getting the necessary data. Use these existing components and the new ones to build the final page. At each step I test and verify that it works properly, and review the code to make sure it's reasonable. I might make several pull requests or just one depending on the size of the task and what makes sense to me. In general I want a PR to be testable, just a component isn't testable if it isn't used so it has to be used. I also don't do a PR that isn't production ready, so I won't submit a PR with just a test page.
If it's a very simple page where we have most or all necessary components I might just send a screenshot from Figma along with instructions to use existing components and what data to use, CSS variables and whatever else and have it try to one-shot it. I generally don't want a PR to have more than a few hundred lines total. I review and test the code at each step and finally I review the whole PR myself before submitting it to colleagues.
If your idea generation isn’t outpacing your implementation speed, coding by hand probably makes more sense. At least it keeps your brain engaged.
But the right move is to find a way to increase the rate at which you generate ideas and offload the coding almost entirely to AI. Because if you’re not doing that, someone else is. They’ll eventually build something better than your app.
And when people stop choosing your product, if you can’t come up with the next idea and this is your only source of income... well, good luck.
> If your idea generation isn’t outpacing your implementation speed
For me, it definitely is. Hell, my idea generation outpaces my ability to delegate it to agents. I can't do all the things I want to do because I don't have enough time in the day to vocalise them all, let alone hand code.
But in my case, I choose to handcode sometimes because I value the certainty of the results more than the speed of development.
It's the choice between a well-engineered application that does a handful of things reliably through a well-tested UI, or a rough-around-the-edges app that does 50 different things passably well, most of the time, with an inconsistent UI and lots of small bugs
People here might question the "lots of small bugs" but I have developed some apps solely with LLMs and despite using test-suites and spec-driven development I still face constant regression and UI bugs creeping in with every revision.
A good example - in React Native, in Android, Claude cannot keep the controls above where the onscreen nav appears, no matter how many times I ask it to. It'll solve it until three iterations later when the issue will return on another screen.
Plug Claude back into your cleaned up codebase.. Its performance may surprise you once again. Maybe the trick to keep our sanity is LLM only on the odd days of the week.
The performance was never in question, it's the control I missed
>Maybe the trick to keep our sanity is LLM only on the odd days of the week.
"I can quit any time I want to."
The debate bothers me. Why anyone feels they need to only code one way or the other is strange. I do both. Actually, there are three options: By hand, hands off, and AI assistance while you code by hand. I'll do any of the three depending on what Im building or how I feel. Why does it have to be a hard line "Im not using AI anymore" or "I have to use AI for everything"?