I've always felt inadequate as a coder. Turns out, that's my sweet spot.

I've been at this a while

My very first computer was a Sinclair ZX-81. For those who don't immediately recognize the name, let me bring you up (or more accurately, down) to speed: it had a Zilog Z80A processor running at 3.25MHz and 1KB or RAM. It was glacially slow, but it had a modest implementation of BASIC built-in, so I spent the next several years using the tiny membrane keyboard to craft GOTO spaghetti code. I think I was 10 or 11 when I got that computer, though to be strictly accurate I didn't acquire it as a functioning computer - it was a kit consisting of a PCB board and a few dozen discrete components that had to be soldered in place. I got almost everything right, but erred in soldering one of the resistor packs in backward. Then when I tried to de-solder it, I damaged the PCB traces, and the whole thing had to be sent back to the manufacturer for repair.

Over the next decade, I owned various home computers from Texas Instruments and Atari. I also spent way too much time in the computer lab in high school using the Apple IIC machines there. All of them included their own version of BASIC, and I continued to write gloriously awkward and inefficient bits of software.

Once the PC-and-internet era arrived, I started messing around with Linux, HTML, and then PHP. I even took a six-month program to learn SQL, Java, and XHTML at one point. Then later on I dove into a Coursera program developing custom machine learning algorithms in Python. All of it was fun (well, not debugging - I've always sucked at debugging) but none of it took me deeper into those technical realms where people earn a paycheck coding. Through it all I was, and remain, technical-adjacent. I tinker.

Not exactly a heroic tale so far is it? But something truly remarkable has happened over the last six months - I've found that I can use vibe-coding to fill in those gaps that stopped me cold before. It started by hacking together some nifty POC's with an Arduino board. Basic stuff mostly, but it raised my confidence. The next thing I tackled was a dedicated Linux appliance that adds latency to UDP traffic on a home network (strange right? I'll go into more details in a future blog entry) and it suddenly occurred to me that maybe I'll never need to be an elite coder. Maybe I'm enough. My current project - an internet radio appliance that I've named the Aether Compass - is turning into a bit of a beast. This thing is likely to be the subject of multiple future blogs, but for now I want to talk about the lessons it's teaching me.

Playing to my Strengths

The parts of solution design I've always enjoyed are the models: the UML, BPMN, ERDs, and other tools where I get to diagram something holistic and elegant. I spent quite a few years working as a Business Analyst, and that compulsion to document things in a structured way has never left me.

When I first decided to actually get started building the Aether Compass, I assumed the actual coding part would be fairly modest. I thought the big part of the work would be the audio design and the woodworking to build a cabinet. Nope. It turns out that creating an entire Linux audio appliance, and doing it in a way that meets my vision for tactility, intention, and soul requires a pretty complex application architecture. My chats with ChatGPT soon started spiralling off on all kinds of wild tangents. Yes, I was hammering out a lot of key design principles, but it was all a Wild West of ideas. I quickly realized none of it would work together if I attempted a "here, just build this" approach with ChatGPT.

The main thing I'm learning is that there's a massive difference between being able to code the solution and being able to understand the solution. Maybe I'll be proven wrong, but I believe it's okay if I'm not able to write a Python function that pre-fetches internet radio station stream headers based on geographic proximity to a navigation reticle. I trust that ChatGPT will help me write that when the time is right. But I spent a ton of time figuring out the software modules my final build will need. Once I had that comfortably locked down, I spend even more time working on the Events model, figuring out both the upstream triggers and the downstream actions. And once I was finally satisfied I had good events defined, I turned my attention to the State model, and figuring out how the State Machine should operate.

In other words, I've been spending a ton of time fleshing out the ground rules for how this device should function, and then incrementally creating an architectural framework that reflects that vision. Yes, I've used ChatGPT extensively throughout this architectural work, but in an advisory capacity. The two of us have had disagreements, and plenty of times I've had to get in front of hallucinations, correct mistaken assumptions, or simply remind ChatGPT about things we've already discussed and finalized. None of that would have been possible if I'd outsourced my thinking.

Even with all that done, honestly it feels like my biggest accomplishment so far might be that I've figured out a pretty good workflow for vibe-coding with ChatGPT. After decades of circling the perimeter of deep technical work, it finally feels like I've got a ticket inside the VIP rope. I'm finally tinkering with a purpose.

Tinkering is having its moment in the sun.

Previous Post Next Post