For curiosity, how complex are these side projects? My experience is that Claude Code can absolutely nail simple apps. But as the complexity increases it seems to lose its ability to work through things without having to burn tokens on constantly reminding it of the patterns it needs to follow. At the very least it diminishes the enjoyment of it.
It varies, but they're not necessarily very complex projects. The most complex project that I'm still working on is a Java swing UI to run multiple instances of Claude code in parallel with different chat histories and the ability to have them make progress in the background.
If you need to repeatedly remind it to do something though, you can store it in claude.md so that it is part of every chat. For example, in mine I have asked it to not invoke git commit but to review the git commit message with me before committing, since I usually need to change it.
There may be a maximum amount of complexity it can handle. I haven't reached that limit yet, but I can see how it could exist.
Simple apps are the majority of use-cases though - to me this feels like what programming/using a computer should have been all along: if I want to do something I’m curious about I just try with Claude whereas in the past I’d mostly be too lazy/tired to program after hours in my free time (even though my programming ability exceed Claude’s).
Well that's why I'm curious. I've been reading a lot of people talking about how the Max plan has 100x their productivity and they're getting a ton of value out of Claude Code. I too have had moments where Claude Code did amazing things for me. But I find myself in a bit of a valley of despair at the moment as I'm trying to force it to do things I'm finding out that it's not good at.
There are definitely things it can't do, and things it hilariously gets wrong.
I've found though that if you can steer it in the right direction it usually works out okay. It's not particularly good at design, but it's good at writing code, so one thing you can do is say write classes and some empty methods with // Todo Claude: implement, then ask it to implement the methods with Todo Claude in file foo. So this way you get the structure that you want, but without having to implement all the details.