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

The human body works surprisingly well, at least compared to most of our systems. Self-replicating, self-repairing, for most an amazing uptime on complex systems like the liver and heart. It has all sorts of different chemical pathways to success. Admittedly it took a while to develop.

0 reposts0 likes

I was choosing the most fun counterexample to your statement :p. Though of course there are also portfolios, electrical grids with renewable energy, &c. Depending on the structure of a system failure doesn't necessarily propagate.

Of course you can't actually write reliable software regardless of your method. It will always be some amount of slot machine as certain facts relevant to its correctness exist with respect to some physical system which you learn about in part by running the program.