The Vibe Coding Ratchet

A ratchet is a mechanism that only moves in one direction - it clicks forward but can't click backward.

When you're in flow with an AI coding assistant, each "ooh what if we also..." only adds scope, never removes it. You can't un-have the idea once you've had it and seen how easy it would be to implement.

Read more →

180 Degrees Twice

Plugged the adapter between the DE-9 and the dongle.

Power on.

Flashed the refactored firmware. The one that had only ever run in the simulator.


Still nothing.

Wrong pins were fixed. New bugs took their place.

Claude Code was watching the serial log with me. Had been the whole time. Two windows open: Claude Code on one side, the log tailing on the other. Every state transition, every WiFi event, every failed AI call streamed past both of us.

Fix one thing. Next thing breaks.

Each fix uncovered the next. Weeks of simulator work couldn't catch any of them. Hardware could.

The last one was a single line. The main loop was returning early when WiFi wasn't connected, skipping all typewriter code. Moved the return. Recompiled.


Typed on the typewriter:

did that fix it? i think it did. 180 degrees twice is a full circle.

Daisy wheel spun. Carriage moved. Print hammer struck.

One moment...    It s-seems my circuits are aligned, Writer. Your
insight is keen; one hundred eighty units, doubled, does indeed
trace a perfect revolution.

Read more →

The AI Pair Programmer

Building ArchAIc with Claude Code partly to understand how it works and what my teams are doing, how they're using it. What does it do well, and what does it do... not so well.

Can't evaluate AI pair programming without experiencing it hands-on. Can't set policies around AI coding assistants without knowing how they work. Team leaders ask "should we let juniors use AI tools?" and I can't answer from theory. ArchAIc is my data source.


Started about a week ago. Created git repo, pointed Claude Code at the firmware, started asking questions.

A dozen PRs merged since then. Tests written from scratch. The initial refactor. Infrastructure. Display architecture. Typewriter web simulator. Hobby mess starting to look like professional software.

A week.

Timeline feels wrong. Projects like this take weeks. Git log shows it's real.

Read more →

The Great Refactor

Code worked. That was the problem.

The Arduino IDE sketch had grown organically. Functions calling functions. Global variables everywhere. Typewriter protocol tangled with AI logic tangled with LED control. Everything connected to everything.

It printed AI responses. It had a name. It worked.

But the workflow was killing me.

Arduino IDE couldn't manage the ESP32-S3-N16R8 board settings cleanly. Is PlatformIO the answer? And coding with AI meant copy-pasting. Describe a problem to Claude or ChatGPT. Get code back. Paste it into the IDE. Test. Find the issue. Go back. Describe what happened. Get new code. Paste again, or worse, manually diff.

ChatGPT had built the captive portal in minutes. Getting those changes into the actual project took longer than writing them.

Tried Cursor first. AI-native IDE. Installed it. PlatformIO extension stuck on "Initializing". Turns out the official extension isn't on Cursor's marketplace. Downloaded the VSIX manually. Installed it. Needed another extension. Downloaded that one too. Wrong binary architecture.

Gave up on Cursor. Used PlatformIO from the terminal instead.

The migration itself took all evening. In a Claude.ai chat window. ZIP files back and forth. "Here's my source code". "Compilation failed, attaching the errors". Five rounds. Fixed the errors. Zipped it up again. Sent it back. That was the last time I worked that way.

The next morning, I installed Claude Code.

Read more →