My context: I’ve been developing software since I was a teen, which means I have more than 40 years of experience. I think at some point every developer has the moment where they can visualize the design work that needs to be done, but lacks the emotional energy to actually tackle the project for whatever reason. Among those reasons are it will take too long and the payoff won’t be worth the time, or it will involve learning a new tool/technique/language/platform that while interesting to learn, leaves one wondering if it the time spent learning will pay off in the end.
Claude Code, for a stand-alone developer, feels targeted into this need. It aims to help you feel you can tackle the project because you can do the part you like, specify, plan, ideate, design, and maybe test, while leaving the “grunt work” to the LLM. It was with that enthusiasm, to finally tackle a couple of long term desired projects, that I finally decided to spend $31.34 Cdn on a month of Claude Code. (It’s US$24 per month, and US$20 per month if paid yearly. In Canadian dollars, it’s Cdn$28 per month and Cdn$23 per month if paid yearly… plus taxes.)
I asked other devs what environment to start in, and it was suggested using Linux would be best so it can run tools easily. Based on that recommendation, I set up Rocky Linux 10.2 in a VirtualBox virtual machine. That was a little more challenging that I initially expected, because I had grief getting the shared clipboard support add-on installed, and without the shared clipboard, it wasn’t easy to get help from Claude to figure out what needed fixing. Eventually I figured out that my install had a small hangover from the crystallization of the version for the install CD, and got it updated to the current patch level.
I then downloaded and installed the dev tools I needed, Java, maven and the claude code tool itself. From there I make a Dev folder to hold my projects, and in that I made a HelloWorld folder for my first project. I launched the claude command line tool from that folder, and it asks if I trust the folder, which of course I do. From there I just typed to it what I wanted. I explained I would be working in Java, with maven, and it did exploration to make sure if could find those tools, and then I explained I wanted a web server, with Bootstrap and to make a little RBAC demo, storing the users in a SQLite database. I asked for guest, user, admin and superadmin levels, and the means to add users and admin them accordingly. Only the superadmin can managed admins, and the admins can manage users.
Initially it hard coded users and passwords for the testing, and it gave me a finished proof of concept to play with. It looked pretty good for a v1, and was probably more polished than I would have done on my own, because while I always liked the look of Bootstrap, I had never been willing to take the time to learn it. As I experimented, I came up with a few new additional requirements, and we worked together to eliminate the hard coded passwords and come up with a way to init the database with a starting user [list]. Along the way I explained my requirements for unit tests, and had it add coverage testing and set a floor on coverage of 80%. It turned out in later projects to have been a good idea to do this, the unit tests even help the machine catch its own mistakes.
Once I liked the look of it, I asked it to extract the infrastructure to a separate module to ease reuse later. It did a good job explaining my options and after I chose one, it made the library and refactored the HelloWorld app to use it. I then decided to make another folder in Dev for HelloRoleGrant and to have it further the HelloWorld framework with additional pages to manage adding and granting roles to users, gating that ability behind a role for managing roles. I also came up with the rule that superadmins don’t have to have any roles to do anything, it should hard code a “yes this is allowed” response for any superadmin account for any role permission check.
Once that all looked good, again I asked it to extract it to a module of its own, layered on top of the first module. It did the same steps as for the first module, and refactored both apps accordingly, and confirmed all the unit tests worked and did what it called smoke testing along the way. (Smoke testing basically means “run the code, see if it catches fire”
)
At that point, I felt confident enough to tackle my first real project, using these reusable parts I had just had it build. I made the new directory for the new project, LANFileFinder, and launched claude code from inside of it. It asked again if I trusted the directory, and I said yes. Then I told it what I was wanting, and told it to use the frame work already built, and suggested it look in the parent Dev directory for the parts we had created in a previous session, and it issued some commands and poked around, before concluding it knew exactly what to use, and then went into “plan mode” to plan the specifics of the new project. It ran for a while to do that, but eventually it came back with plans for me to review, and more questions about them. I answered the questions with my choices, it updated the plan and jumped right into write the code.
At several points along the way, I ran into the limits of my “Pro” subscription, and had to wait a period of time for more allowance. It seems to use a window system, maybe about 5 hours, and if you do too much in five hours it makes you wait until the start of the next 5 hour window unless you want to transition to pay as you go which would cost more outside of your subscription.
In the end, over a period of 24 hours, I worked through building a framework for future projects that I like, and got a very good foundation for my file finder, which is a tool I’ve long wanted, but just never got around to building for myself. I haven’t yet spent a lot of time reviewing the code, but I have seen snippits along the way, and haven’t seen anything egregious. The way it works with maven is also very compatible with how I would work.
There were a few oddities though. At one point it seemed to hallucinate a complete different path than the one I was working out of. It should have been working in /home/paul/Dev/... but it started trying to go to /home/pho/Dev/... and that freaked me out. I interjected with “Whoa!!! What is /home/pho !?!!” and it apologize that it had made a typo, but basically shrugged it off with a form of “no harm, no foul” because the folder didn’t exist and it hadn’t thus put anything there. That’s not confidence building however.
I also saw it write buggy code, and get caught by the unit tests and then turn around and fix it. That reminded me a lot of a real human, junior dev, trying things and failing but plodding onward toward the final goal. A number of times I had to remind it to add more unit tests for something it had just done, and a number of times I had to explain that it had made a decision that didn’t align with what I thought I wanted. It was often very good at deferring work for later stages, maybe a little too good at it, it could come across as “lazy” and not wanting to do the hard work sometimes.
All in all, not a bad experience. It feels like I’m making quicker progress, but also feels like I am always on the clock, never wanting to stop because I know I have a deadline looming (the end of the subscription) and I want to make sure I get maximum value from it by working with it as much as I can. It felt exhausting in a different way than doing all the work myself. I felt like a micromanager but I didn’t get the dopamine hit of success I would have got if I had done it myself.
