How to Move Beyond Vibes to Learnings

It’s incredibly easy to get an LLM to emit just a ton of code that may or may not do what you ask. It’s not free, you still have to do the work to understand the code. Otherwise you and the LLM are just wasting time, writing something destined for the trash bin.

It is very powerful. This is a way to learn about new technologies, new techniques, and to get a lot of tech in place quickly that you have little familiarity with. It’s also easy to get lost in a muddle of broken code you don’t understand and you can’t see a way forward and the LLM is fighting your every request.

You must temper your expectations and, yes, spend more than a little time thinking to make a real project. Here’s three tips to get the most out of vibecoding a new project from scratch:

1. Get a Build Environment Working Early…

… and get it as close as possible to the LLM producing the source. Even the agentic-type tools that can work on your filesystem can do altogether too much work without every verifying anything. And if you find yourself copying, pasting, cleaning up, checking in, and deploying before you can even find problems with the build, your project is at serious risk.

Get a build working early on. Ask your LLM to add this setup info to a project readme. And then run regularly. If you’re using an agentic tool, get it to validate its own work with these commands.

Every time you get to a good spot or a worth checkpoint, use version control to save a checkpoint.

2. Be Ready to Learn a Different Way…

… and learn different things. For a scratch project you’re a manager. For something you’re well-versed in, you may be an engineering manager, helping with architecture and technical decisions. For new domains or ones you haven’t touched in even a couple years, you’re going to be closer to a product manager, and the LLM is going to be making a lot of decisions you won’t know to be right or wrong until you dig in.

You will necessarily be an outsider to this project. You will see a forest, not the trees. A couple pertinent comments on hackernews:

LLMs are exciting but they produce messy code for which the dev feels no ownership. Managing a codebase written by an LLM is difficult because you have not cognitively loaded the entire thing into your head as you do with code written yourself. (source)

you’re essentially the new guy on your own project. (source)

This 10,000 foot view and separation is not all bad. It will give you exposure to new technologies and standards. But you won’t feel like it’s yours until you start to really spend time and understand it. To pull it back into an engineer’s focus, you’ll have to learn it like a new engineer on the team. Piece by messy piece.

3. Be Prepared for a Fight…

… because the LLM will forget, forge, and gaslight you the whole way through. Do a lot of planning and discussion with the LLM and produce a simple document outlining the expected project. Then consider starting over with your finalish decisions in a new session.

In particular, in long sessions, major decisions can be randomly forgotten. Or the LLM may outright refuse to do something on the grounds that it’s a major architectural change. Or its knowledge cutoff may not have all the latest answers and it will refuse to admit, say, a version upgrade.

Plan for succession and the future of the project. When a chat or session goes too long and starts becoming eccentric, figure out a way to start again without losing all you’ve gained. Produce a strong README file and TODO list is one way. Be sure to read them carefully for accuracy.

Bonus Wisdom: Don’t Replace Existing Intelligence and Tools with “AI”

There are many tools and already-built methods of processing and extracting data. You don’t have to force an LLM to do this work. For example, find and replace has a large amount of tooling. We know how to process vast datasets with machine learning best practices and tools. Modern IDEs can extract and refactor existing code. You could ask an LLM to do these things, but it will be slower and less precise. You may just end up burning budget when a tool with a tiny footprint can do the work easier and better.

There are times where it’s just best to step in and use these tools and fix things, then get the LLM back on track doing what it’s best at.

For large existing projects on which you want to make a change, it’s often better to have your LLM make you a tool or script to operate on files, rather than try and pipe every source file through the LLM and hope it can make some sense of them all.

This concept is equivalent to the problem many early AI projects have: run customer data “through AI” and generate… something. When you could have just as easily used old-fashioned artisanal “I” to do the same at a smaller price and with better results. An LLM isn’t magic, it’s a probability-based knowledge search engine.

Coming up

I’ll continue this series with some concrete examples. Next up: using Gemini Canvas to build my Farm project. After that, I’ll switch to some other providers, maybe discuss a local agentic setup, and such.

Posted in AI Study | Tagged , , | Leave a comment

Excellence Out of Mediocrity

My email sig has been “Defy Mediocrity” ever since I found myself at a job where I ran out of work to do. Since then I have challenged myself to do excellent and difficult work. Did crazy stuff with Eclipse and databases for a couple years, then Swing and patient bedside devices for a few years, then 14 (!) years with Android and Payments.

As of 6 days ago, I no longer work for Square. I was laid off with 900+ others. Now, more than a few folks would challenge that I was ever anything but mediocre. Did I so quickly abandon my credo?

No. I chose mediocrity. Or what seemed it. About 10 years ago I realized I wanted to multiply others, make them better, faster, smarter. I continued my work, but at every turn I’d lift up teammates or even the larger organization with knowledge and empathy.

I even dived into management for a couple years. At first seemed like a good fit with the whole amplify mindset, but the reality of that means I’d also necessarily depart entirely from the engineering and technology I loved. During this time, for one of my employees, I wrote “How to Fail at Your Job Every Day for Years” which I guess is an ode to everything I loved about being an engineer.

For my last year at Square I was able to be an engineer again and I’m so glad I got to experience that again. The last four months especially had been the pure bliss of working closely with skilled engineers on focused projects.

Of course I’m left with that melancholy ache. Would I do anything different? Sure, lots of things. But I wouldn’t have tried to make myself somehow anything other than who I am.

Posted in The Clumsy Pattern | Leave a comment

Yay, Encoding issues

I’ll try to get encoding issues resolved, for now enjoy your “” characters and more!

Posted in Uncategorized | Leave a comment

Wannabe: Dimensionality

As I proceed farther into wannabe, I find I need more content to test and validate the work I’m doing.  That is the purpose for the vignette milestones over in the issue tracker.  So, I’ve finally started on one: Rain.  In it, the plan is to have a house, a yard, some background terrain, and ultimately some animated rain falling silently. Read through the end for some fun videos! Continue reading

Posted in Wannabe | Tagged , , | Leave a comment

Wannabe: The Perils of Hidden Voxel Removal

At least part of the problem Wannabe has with rendering is that we’re blindly drawing every voxel in a somewhat arbitrary manner.  Right now, it’s sorted only by Z, the rest stays in the order added to the initial grid.  We can trick the various RenderTypes to show the wrong thing pretty easily then, just by crafting the data properly.  Only reason things have been reasonably decent is because I’ve tended to add voxels from left to right, top to bottom, and the best looking renderer is up-and-to-the-left.  Any mistakes will get drawn over. Continue reading

Posted in Wannabe | Tagged , , , , | Leave a comment

Wannabe: Interlude

I’ve not not been working on wannabe — in fact I have significant code and written content that I haven’t posted.  I’ll try to get somewhere more this weekend.  In a nutshell, there’s at least two problems: I use a pretty naive neighbor data structure, and I ended up conflating hidden surface removal with hidden voxel removal.  And I’m not sure I can quite tease those apart.

Continue reading

Posted in Wannabe | Tagged , , , | 1 Comment

Wannabe: Gaining some perspective

Small diversion:  What I didn’t really mention in the last post was that I had actually gotten the PsuedoPerspective working a bit better.  Let’s see what that looks like! Continue reading

Posted in Wannabe | Tagged , , , , | Leave a comment

Wannabe: Advanced cubism

Continuing the Cabinet projection effort from the last post let’s see if we can close out issue #1 on github.  We need to add sides and make sure things look good under different circumstances. Continue reading

Posted in Wannabe | Tagged , , , | 1 Comment

Wannabe: making a Cabinet

I’ve copied several of the issues from the last post into the github project’s issues list. Herein, I work on issue #1: A Cabinet (Projection).  Read on to see how we can make these little squares a little more cubey. Continue reading

Posted in Wannabe | Tagged , , , | Leave a comment

Even a wannabe needs goals

In the first article, I described the basics of wannabe: a simple graphics engine.  I haven’t been letting it sit, I’ve added some small features to it and have been making plans.

On github: wannabe: Multiplatform low-resolution 3d engine. For losers, by losers. Continue reading

Posted in Wannabe | 1 Comment

Muppets Most Bestest

Someone on the Internet is wrong.  IGN recently made an ordering of the Muppet movies from worst to best. It’s almost entirely wrong.

Here’s my list, from best to worst:

  1. The Muppet Movie — It’s hard to argue with the first one.  Lots of heart, fun introductions for all the characters.  This was my introduction to the Muppets, I hadn’t really seen much of the series yet.
  2. The Muppet Christmas Carol — Aside from the great story, a great juggling of traditional Muppet roles.  Gonzo and Rizzo as narrators, lots of fun songs.  Except “The Love Is Gone”, ugh, that one’s tedious (and only involves humans anyway).
  3. Muppets From Space — Mega-funk soundtrack, and lots of chances for the new Muppets Tonight characters to really shine.  Much love for Bobo.
  4. Muppet Treasure Island — Tim Curry is always gold.  Great songs and wackiness, but it just didn’t rise to the level of the Christmas Carol.
  5. Muppets Most Wanted — a pretty good return to form after the disappointing The Muppets.  Action, goofiness, good songs.  Ty Burrell and Sam the Eagle had a fun subplot and one of the betters songs.
  6. The Muppets — while it was great to see a return to the big screen, this film felt a little whiny and angsty.  It seemed to have very few musical numbers, too.  The opening bit was pretty good, though.

And here’s the Miasma.  I just don’t remember anything remarkable about these Muppet films; I should re-watch so I can insert in the above list.  And isn’t there another one?  I’m almost positive that in the opening act of Muppets Most Wanted they said that this was the eighth sequel.

  • The Muppets Take Manhattan
  • The Great Muppet Caper
Posted in Movies | Tagged , , | Leave a comment

Fun economic reading

Three interesting (but not short) economic documents came across my desk over the last couple of months. Sort of natural, I guess, given that I work for Square, but I think they are all worth reading. That said, I’m about halfway through each. 😉

  1. A simple explanation of how money moves around the banking system — Ever Move money electronically?  How does that work?
  2. How the Bitcoin protocol actually works — pretty applicable to Dogecoin, too, a far more impressive currency.
  3. The Economics of Star Trek — I often give some thought to this.  This is a fun exploration of really doing it.
Posted in Entertainment | Tagged , , | 3 Comments

The Clumsy Pattern: Doing “Girl Power” wrong.

The debate over gendered pronouns popped up in computer-science-land over a couple of commits for node.js.  There are serious problems with the male-dominated culture in CS (and video games, for that matter), and this blog post by the corporate maintainers of node.js was really the wrong reaction on a couple of points. Continue reading

Posted in The Clumsy Pattern | Tagged , , | 1 Comment

The wannabe graphics engine

After recently getting an Ouya device, I got inspired to make a game.  Then I realized two things: I don’t have any skill with 3d, and I learn by doing.

Here’s a quick guide to what I’ve done so far: wannabe, a multiplatform 3d engine, for losers, by losers. Continue reading

Posted in Wannabe | Tagged , , , | 1 Comment

Making an Android app look like a web browser

I’m not in the business of writing web browsers, but my HTC One X has a problem: HtcLinkify. Due to an annoying lawsuit from Apple, HTC changed the behavior of web links on their devices.  Instead of jumping right into a specific app, the web browser just dumbly follows the link itself.  There is a way to fix, but you have to root your phone. Continue reading

Posted in Technical | Tagged , , , | Leave a comment

Great game music…

I have a large mix of games, many of the recent additions from yon Humble Indie Bundle.  The great thing about Humble is you always get access to game soundtracks, so there’s a lot of top-quality music available.  Here’s some of my favorites. Continue reading

Posted in Games | Tagged , , , | 2 Comments

What’s it like to be smart?

What’s it like to be smart?  Some quick thoughts, with a twist that surprised even me.

Continue reading

Posted in Family | Tagged , , | 3 Comments

I’m on a Mac: Recovery

Tried to boot up my macbook after a long weekend.  Got the inscrutable flashing folder with a question mark.  Tried a couple of tips from the internet, like holding option or ‘c’ down, neither of which worked.

Then, hooked up my TimeMachine backup and the recovery console came up on its own, and allowed me to fix the disk (partition table reported the wrong size).  Everything was happy.

Kudos, then, Mr. Mac.  If you have a time machine handy, it works pretty well.  The opposite of kudos for not really telling me that before or after, and for crashing in the first place!

 

Posted in I'm on a Mac | Tagged , | Leave a comment

Upgrading Git on MacOS X Lion

This was way harder than it needs to be, because MacOS X Lion ships with git 1.7.4.4 in /usr/bin.  Here’s a quick sequence of steps:

  1. Download and install latest version from http://git-scm.com/.  This appears to work but won’t change anything from the command line.  The new version is installed in /usr/local/git.
  2. Reconfigure your path to put /usr/local/git/bin in front of /usr/bin.  Something like this in your ~/.bash_profile:
    export PATH=/usr/local/git/bin:$PATH
Posted in I'm on a Mac, Technical | Tagged , | 2 Comments

I’m on a Mac: Utilities you need to survive

Several utilities that make life bearable on the mac:

  • KeyRemap4MacBook — awesome way to make sensible keyboard changes.  Recommend the following settings:
    • Change Eject Key / Eject to Forward Delete
    • Change Fn Key / Fn+letter to Control_L+Letter (note: I use MacOS’s keyboard changes to change Control keys to Command keys)
    • Custom Shortcuts / Hold Command+Q to Quit Application
    • And my own private.xml file, with Change Cmd+H to Ctrl+H (For Eclipse), and remap Alt-F4 to Command+Q (not that I love windows, but I don’t want quitting to be easy)
  • Stay — $15, but worth it if you move between different monitor configurations.
  • Airfoil — $25, if you want to use AirPlay with external programs like Pandora or Spotify.
  • Jumpcut — clipboard history
  • Disk Inventory X — find out where your disk space is going
  • Bigger names, all cross-platform: Songbird, Firefox, Chrome, Steam, etc.
  • Finally, VirtualBox, so I can use real operating systems when I need them.
Posted in I'm on a Mac | Tagged , | Leave a comment