Post

I gave Opus 5.5, considered the best model these days, a medium-sized task. Even after a full adversarial review and simplify loop to convergence, it produced code that worked but was garbage, with limited use of newtypes and representable invalid states everywhere

I prompted it to fix that, giving a couple of hand written examples, and it did. But then later in the same session it forgot about that and added more such representable states. I refuse to lower my standards to what these things write by default

Code that works at a point in time is mostly uninteresting. What matters is building structures to ensure code stays correct over time. That to me is the essence of engineering in software

Look this is sometimes true but also most of nextest's core architecture is basically the same as it was day 1. Plenty has changed around it but this page, extracted from the first design doc I wrote for it, has not nexte.st/docs/design/...

Plenty of value in prototyping and trying out a few options before committing. LLMs can be great assistants at that. But this "throw the first 9 versions away" attitude has always been strange to me in code. There is so much value in committing and iterating on something

nope! should I? cant recall where I first heard the analogy... I think I was saying "throw socks at the wall to see what sticks" until maybe Klab said the slots analogy, which Ive used since