Post

I will not stop reading code anytime soon. LLMs can generate code that's correct and even performant, but I frequently find it too complex. And I hate accidental complexity - it compounds very quickly and leads to cruft, bugs, and, ultimately, slow and unreliable software.

Here's an example from last week. I worked on a fairly complex feature. First, iterating on the spec. Lots of research, going back and forth with the agent, finally coming up with a decent high-level design doc.

Then, implementation. Rust project, Opus 5.5, Claude Code, subagents, a bunch of useful skills, a well-crafted AGENTS file and, most importantly, a fully self-contained end-to-end testing suite with hundreds of tests that the agent can run.

The implementation was done, and I spent several days reviewing it. Just to be clear, my goal wasn't to understand every single line, but to build mental models about the abstractions that the LLM generated.

0 reposts3 likes

And I kept finding new abstractions that seemed too complex. After 20 years of building software, I've developed a pretty sensitive complexity detector. You look at a new struct with 7 fields, and it raises all kinds of alarms.

So I pushed back: can we simplify this specific abstraction? The answer: "Yes, this can be simplified. Here's why the gate ended up complex, and two ways to simplify it."

I spent several extra days, but, as a result, I managed to remove a lot of unnecessary complexity, and I'm pretty satisfied with the result. But if you are new to the field, you don't have the same level of expertise to question LLM's output, and it's a bit scary, especially long-term.