How THIS long-time dev uses AI

There’s a lot of talk about “vibe coding”, the idea of just throwing prompts at an AI and hoping it spits out something useful. A fairly new term coined by Andrej Karpathy. But “forgetting that the code even exists” might work for a weekend hack project, but it’s not what seasoned developers are doing as far as I can tell.

Experienced coders aren’t handing over the reins. They’re still designing systems, checking code. And treating AI as a helper. A recent article in The Register noted that many senior devs now rely on AI for more than half their work. I’d sat that isn’t “vibes”. That’s experience. Or as Simon Willison says, it’s “using an LLM as a typing assistant”.

Prompts with a Plan

The real difference is in the way they prompt. A non-developer might prompt, “Build me a CRM for patio furniture business”, and leave everything else up to the AI. A veteran knows enough to write out the full plan: stack, database, models, security, tests, APIs, integrations, whatever. The AI is just filling in the details.

That’s where experience shows. Knowing what to ask for, recognizing when the AI stumbles, and steering it toward code that will actually hold up.

Faster in a Different Way

Studies show senior developers get more value out of AI even though they spend extra time fixing what it produces. That’s because they’re looking at the whole project, not just one function. What used to take weeks of boilerplate work can now be sketched out in hours. Then they can focus on design, security, and scale.

AI handles the repetitive stuff: models, services, tests. The human brain is free to solve the harder questions. Where do we draw system boundaries? How do we keep data safe? Can it handle real traffic?

Always Double-Checking

Of course, AI still makes mistakes. It doesn’t understand projects the way humans do. It might try to fix a bug by piling on extra code instead of solving the root problem. In one instance, Claude Code was trying to fix some failing tests and ended up creating various debug files and “test” code in the service class. I stopped the agent, and realized that the parent class of the test wasn’t setting a mock object correctly. A simple one-line fix, but Claude didn’t find it. Experienced developers are able to understand when the agent goes off the rails, and know where to look.

My Process with Claude Code

The PLANNING.md “Trick”

One of the easiest ways to keep Claude on track is to give your project a “second brain.” Start with a PLANNING.md file in the repo, and have Claude break down the project. This doc becomes the single source of truth for the project – goals, architecture, and next steps.

Here’s how it works:

  • Plan first: Outline the stack, features, database, APIs, and deployment.
  • Break it down: Claude splits the plan into small tasks, like setting up auth or writing migration scripts.
  • Stay focused: For each task, start a fresh session with Claude and only prompt it the relevant slice of the plan.
  • Update as you go: When a task is done, have Claude mark it complete and add notes back into PLANNING.md.

This loop keeps both you and the AI synced, so the project grows in an organized way. And also gives you specific points where you can stop and debug.

Plan Mode as a Sanity Check

Another great move is to force Claude to “think before coding”. You can start in “Plan mode” and ask it to outline what it wants to do before writing any code. Approve the plan, or re-prompt if something seems off, then let it generate.

Catching mistakes in plain English is way cheaper than debugging 200 lines of nonsense later. Juniors might miss issues here, but experienced devs can spot when the Claude’s plan doesn’t fit the bigger picture.

Not Vibing, Conducting

So no, senior devs aren’t “vibe coding”. They’re conducting. The AI is the orchestra. It’s powerful and fast, but ultimately… directionless. The developer is the conductor, setting the score and keeping the rhythm.

That’s where coding is heading. Human vision plus machine speed. Less typing every line, more designing systems and guiding AI to build them right.

3 Years Between Posts – Game Development

It’s been a while. My latest non-work obsession is trying out various game ideas. I’ve always had an interest, and a few ideas, but getting proficient with a game engine like Unity or Unreal seemed a daunting task.

I did start a few years ago with Videordle, a Wordle ripoff where you try and guess the “video of the day” with a super zoomed-in clip. Each wrong guess zooms the clip out a bit. One of the goals was to have it all self-contained, and only vanilla javascript. So you could technically download it and run it all locally.

Last year, I had the idea for an Android “word game”, and I created Word Stars using React Native. I utilized my Laravel skills to create an API auth and backend for the game. That went very well, so I kept going with React Native and ported Videordle to an Android app/game, also using an API to deliver the data. I haven’t touched them since release… but also, no one is playing them. Also, also, I’m horrible at marketing, so I doubt anyone knows they exist.

I also got interested in bigger games, so I started learning more about Godot, a free game engine I’ve toyed with, on and off, for a few years. That led to My First Game. After that, I started working on another platformer type game in Godot… one that I would eventually like to release on Steam at some point. That’s going to take longer, because it’s bigger in scope, and I don’t have a lot of dedicated time.

In the meantime, I want to actually “complete” something, so I’ve entered a few itch.io game jams. The first one I did was an RPG Maker game named Anxiety. I bit off more than I could, with an ambitious idea and a game engine I never used before… so it’s only about 1/3 of what I envisioned. But it’s submitted. So that’s a win.

I have a few more of just me playing around with things, and experimenting with quick ideas. The next jam I’m signed up for is Bullet Hell Jam 6, which could be fun. I’ve been playing around with the logic in Godot, so once it starts, I can hit the ground running. The next jam after that is for GDevelop, another engine I only just downloaded last week. I’m tempted to use THAT for the Bullet Hell jam, so I can learn. We’ll see.

The most recent thing I’ve completed, and fairly happy with, is Idle Hands. It’s an “idle clicker” game where the goal is to collect demons and traverse the circles of Hell. Visually, I’m happy with it… up next, I need to add some music and sound effects. This is also a game that’s vanilla javascript. It’s literally just index.html, index.js, and styles.css … plus assets. I added a package.json just for minification, and I think I’m going to release it on mobile using Capacitor.

The future: I remember having a Palm Pilot in the early 2000s, and there was a game called “drug wars” or something, where you bought goods in one place and sold them in another to try and make money… and random events would happen that could either help or hurt your profits. It was fun. I have the idea of doing a similar concept, but for music – like you’re trying to put a band together and you have to change it up as musical tastes change, so you buy and sell things like a “fiddle player” when country music becomes popular or something. I still have to work it out.

Updating a 10 year old Laravel post

In November of 2012, I had a short blog post about using Laravel (at the time v3) with the Redactor javascript code for wysiwyg textareas. It’s not bad, but could use an update.

First, I see “classic” Redactor is deprecated in favor of Redactor X, and they want you to pay for it. Since I don’t plan on actually using, I’m going to assume the docs work as expected. Second, Laravel is now on version 9, which is a long way from version 3. Though interestingly, the syntax is not that wildly different.

Begin by updating initial route, now located in “/routes/web.php”. Instead of the View facade, we can do this:

Route::get('redactor', function() {
    return view('redactor');
});

Easy! We could’ve left it as is, since View::make() still works (!!!) but this is a bit nicer.

Next, we can update the HTML for that view. In the original, it was using a non-Blade view which is a bit silly in 2022. Also, the Form facade was removed from Laravel in version 5, so you either use plain-old HTML form tags, or the HTML package from Laravel Collective, which is what I did.

<!DOCTYPE html>
<html>
   <head>     
         <title>Laravel 9 and Redactor</title>
         <meta charset="utf-8">
         <link rel="stylesheet" href="css/redactorx.min.css" />
   </head>
   <body>
         {!! Form::open() !!}
         {!! Form::label('mytext', 'My Text') }
         <br>
         {!! Form::textarea('mytext', '', ['id' => 'mytext']) !!}
         <br>
         {!! Form::submit('Send it!') !!}
         {!! Form::close() !!}
         <script src="js/redactorx.min.js"></script>
         <script type="text/javascript">
                RedactorX('#mytext', {
                    image: {
                        upload: '/redactorupload/'
                    }
                });
         </script>
   </body>
</html>

No more jQuery and fancy Blade code!

Then we update the route that will accept the upload, and again, it’s still pretty close to the original:

Route::post('redactorupload', function(Request $request) {
    $validation = Validator::make($request->all(), [
        'file' => 'image|max:10000'
    ]);

    if ($validation->fails()) {
        return false;
    }

    $filePath = $request->file('file')->store('public/images');
    if (empty($filePath)) {
        return false;
    }

    return response()->json(['filelink' => Storage::url($path)]);
});

The biggest difference is the Input facade was removed in favor of using the Request object in the closure. I also removed an unneeded else statement.

The final bit of code was simply echoing out the form input if you submitted it. Instead of doing a dd() (which still works), we can update it like so:

Route::post('redactor', function(Request $request) {
    return $request->all();
});

That’s it. Now we have updated some 10 year old code!

Laracon: Saturday. 1st Laravel Conference in (others’) Pictures.

Morning in Washington DC

 

 



 

Aaron Kuzemchak : Simple API Development

Demo

 

 

 



 

Dayle Rees : Laravel: An Unexpected Journey

 

 

 



 

Zack Kitzmiller : Procrastinating Code

 

 

 



 

Jonathan Barronville : Vagrant, Puppet, Laravel & You

 

 

 



 

Eric Barnes : The Care and Feeding of a Robot

 

 

 



 

Shawn McCool : Running a Small Business on Laravel

 

 

 



 

Taylor Otwell : Eloquence Evolving

 

There were some awesome talks here at #Laracon. Looking forward to the next!

Links to Unemployment signup page for each state

At SXSW, I spent a couple of the days at the sessions dealing with government topics.  One of the things that was brought up quite a bit was that State websites are almost universally horrible.  They’re poorly designed and finding information easily is near impossible.  Utah is one exception to this rule, but really, it’s just about the ONLY exception.

I decided to try and find the Unemployment signup pages for a couple of states, just to see how easy or difficult it was.  It was NOT easy.  I remember a couple of years ago, when I was laid off, getting to the Texas unemployment online signup was full of twists and turns, and pages of descriptions and explanation. I just wanted to go to the signup page.  So I decided to create a simple page with links to the unemployment signup pages for each state… hopefully skipping all the explanations and description pages.

As I was searching for each state, I was surprised at how outdated the sites were. So many required Internet Explorer, and a couple prevented me from even accessing the pages using Chrome.  And Pennsylvania… Netscape Navigator? Really? Well, it IS using classic ASP… so I guess it is to be expected.

I think I may do this for other commonly needed pages, too.  In one of the sessions, someone mentioned how difficult it was to find info about building permits… but since that gets into county and city pages, it may be beyond the scope of this project. I just need to figure out what pages are most commonly needed.

Terry’s Happy Place songs

There are songs that just seem to always make you feel better when you hear them.  I’ve kept my own list in my head, and now I want to collect them into one post.  The list is fluid, but most of these have been set for years.  In no particular order, songs that put a smile on my face:

1) Morningwood – Nth Degree

2) Frankie Valli – December, 1963 (Oh, What a Night)

3) Glass Tiger – Don’t Forget Me When I’m Gone

4) Dolly Parton – Here You Come Again

5) Duran Duran – Hold Back The Rain

6) Duran Duran – The Reflex (yes, 2 Duran Duran songs)

7) The Beatles – Good Morning Good Morning (pretty much any Beatles, though)

8) Public Image Ltd – Disappointed

9) Radiohead – Bones

Fun puzzle – Christmas Conundrum

Saw this puzzle on Chris Shiflett’s blog and was able to figure it out. Don’t read further if you want to try yourself…

 

 

 

 

First, I wrote down the numbers, and immediately noticed the first numbers “1024” and “512” were suspiciously binary… though, that seems somewhat coincidental now. However, I plotted all the numbers into a spreadsheet, then did a conversion to binary.  I began thinking that maybe the 1s and 0s were like the beat of a Christmas song, so I tapped them out, and it didn’t seem to be anything.  Though bits seemed to be like “Jingle Bells” or “God Rest Ye Merry Gentlemen”, they never played out for the entire song. I got a bit sidetracked, thinking this was a designer, that maybe the numbers should be converted to HEX values, and use those colors for something.  Again, it didn’t pan out.  Here’s where I was at that point:

Then, as I looked at the column of binary numbers, I noticed there was a pattern… not in the numbers, but in the shape of the groups of numbers. I converted the column to monospace type and started connecting the 1s. It really didn’t make sense at first… but I saw the last group of numbers made a Greek Sigma “Σ” and an “X”. So I thought “Sigma Chi”, a fraternity.  The numbers above it made a “W” and a Sigma, and I thought maybe the “W” was supposed to be a Psi, but I couldn’t find anything relevant for “Psi Sigma”. At that point, I hadn’t connected all the 1s correctly, so I went back and connected all the 1s, even diagonally. The patterns became a lot clearer… but it still didn’t make sense.  At that point, I had my table turned just a bit to the side, and noticed the Sigma could actually be a sideways “M” and the “W” a sideways “E”… so I had “E M M X”.  With that, I saw I already had the “A” and a “Y”. Once I made one more missed connection of 1s, I had the two “R”s and figured the extra bit in the first group was an “!”.  From there, it was a simple matter of re-ordering the letters to make: MERRY XMAS!

Thanks to Chris Shiflett for the fun diversion. Though, it looks like I missed submitting the correct answer by only a few minutes (congrats Cogocogo) … it was still an enjoyable brain exercise.

Found an Old Song I Co-wrote

I used to have a site full of my old bands’ music, but that site went down and all those songs got trashed. I have them all backed-up on disc somewhere, but haven’t had a chance to go through all the stuff we have in boxes.  Anyway, I found this mp3 in one of my archives and I’m posting it here for the time-being. Wow, it’s almost 10 years old:

Smooth Like Roy’s You Know I Would

NewIceEnemy – GirlTalk inspired mash

After seeing SO many tweets about how great and awesome and wonderful the new GirlTalk “album” is, I decided to do a quick mashup on my own. It seems the formula is:  1) find an instrumental hook from an 80s pop song, 2)get some rap acapellas,  3) grab a vocal hook from some other ironically cheesy song, 4) mix them together.  In that vein, here’s my New Kids on the Block, Vanilla Ice, Public Enemy mashup:

NewIceEnemy