Loop Til It Works Is Great for Some Things

I've been tuning and refining ui-engine.

Man, design choices early on dramatically affect the quality, capabilities, and potential responsiveness of a platform, especially if it has a UI. I've been using a lot of UI experience I've acquired since the 80s and tuning this platform is making me pull out some pretty weird heuristics, like "use a debounce," except in certain situations where that actually interferes with responsiveness.

And, yep, I just scrutinized what Claude did and it's starting the debounce timer on the first send after processing a batch, so when processing a batch takes a lot of time, debounce will actually make responsiveness worse by adding yet more of a wait on top of that. Bad decision.

My friend says Claude's a lazy coder.

Claude does the easy thing if you just tell it, "build X". That's pretty much at every level throughout the system. Even a good design ends up with Claude cutting corners when it writes code because it "thought that wasn't necessary for reasons", even if you give it guidelines like "use SOLID principles" combined with "use OO techniques". I typically collaborate with Claude on my own planning files or in plan mode before I start a project but even with this, it just doesn't really know where you're going with your project.

Since these early choices have such an impact down the line, it seems like "loop 'til it works" will result in stuff that works but has built-in limitations that make it slower and brittle to changes, causing Claude to do a ton more work than it should have when you ask for mods. Like you ask for an addition and it has to rewrite a ton of stuff because it didn't allow for that possibility.

As an example, consider how Claude Code implements its TUI (terminal user interface). Here's a video on it and here's an analysis of some of its... regrettable engineering decisions.

I think loop-til-it-works will be good for apps that are innovative at the human level but not at the technical level. You can build those on top of platforms that are very user-responsive, like ui-engine (which is what frictionless uses), and not worry. Just having Claude poop out an app without choosing good platforms risks the above problems. Web browsers themselves are examples of tuned, user-responsive platforms that need a lot of engineering.

So I guess what matters is whether a project depends on new engineering. Most apps in the world use current engineering, not new stuff, even most games. A minority of games develop their own technology but that's just generally improvements to platforms that already exist, like extensions to Unreal Engine.

Comments

Popular posts from this blog

Safe navigaion in Scala, take 2

Calculator/spreadsheet tool for Acme

Quick update on The Philosopher's Stone