Serious coding with LLMs. Lab notes 2026-11-03: If you offload your thinking, you’re onboarding risks

To find out more about the reality of all the (generally overblown) promises about LLMs, I have been doing a very serious experiment on the poster child for Generative AI: coding. I wrote one critical post, and I am close to writing up my conclusions, but I am hitting some work that I have to do first before I can publish that (e.g finish some final functionalities and improvements).

This is Lab Note #8. Some basic explanations about my setup are in Lab Note #1. Some basic technical notes (on tokens, context) are in Lab Note #5.

This post has gotten a bit long and technical, so let’s do a

Coding with LLMs is an impressive experience

For a software engineer, the sheer speed with which LLMs can generate large volumes of functional code is overwhelming in more ways than one. It is overwhelming because software engineers know from experience how hard coding is, and how slow the process can be, especially when code bases are large. You also need to be concentrated all the time, because every small error is a potential big problem. And working for hours on end to produce good code is thus an exhausting activity. This is why software engineers have to slack off regularly, it is humanly impossible to keep this up constantly.

So the first time you put in a prompt for some functionality and you find that — in no time — the LLM has produced convincing-looking and functional code is a shock. And it becomes easy to become convinced that LLMs will replace you, or at least speed you up enormously. Before we conclude that, we need to dig deep, however. Hence my experiment about trying to get a feel for the maximum quality of code that the best coding LLMs can generate in a large project (from the ground up, which means existing code doesn’t work as an anchor)

In this experiment, I have now worked intensively for a long period on producing a very serious software system. I would not have been able to get to the point I am now in terms of the richness of the system without the LLMs, that much is absolutely true. By ‘burning’ over 40 billion (with a b) tokens, on paper costing €30k (in reality the subscription has cost me 2% of that, or €600, so 98% of my LLM use has been subsidised, mostly by venture capitalists and private credit — thanks, all!) I have been able to create in 6 months something I would not have been able to do in the slightest. The volume alone speaks for itself: 320k lines of code and documentation.

But there is another price to be paid than the monetary one, the mental one, and it comes in different forms.

The first is the cost of mental offloading, mostly in terms of risk. Mental offloading is very attractive for a human. Thinking and concentration is hard and costs energy, and energy conservation is a key driver for any living being. So, we enjoy it, we hunt for it. At the start of my project I did some research on the best graphical framework for the presentation layer and because I wanted portability, I quickly came to the conclusion that my only real option was Qt, which is state of the art but also has a free, open source, tier. As Qt is a C++-based framework, the choice of development language was therefore natural: C++ (which I had some very rusty experience with — I remember when it was new in the 1980’s…, this project really is a bit like waking up my old roots). Later, when I investigated auto-layout, I came across a state of the art library called OGDF (though, it is a university project and the code quality is sometimes questionable, like there begin ‘dead code’ in it). In the past, I would have to learn them all: Qt, OGDF, and many more elements of the project. This time, I did not have to. The textual code patterns represented by the parameters of the LLM can handle this fine, it seems (more about that key question behind this experiment another time).

There is a catch, though. There are at least two:

  • The first one is that is time goes on and the volume of logic grows, I become less and less able to give well-founded guidance to the LLM, and the LLM needs guidance, it is completely unable to do this kind of work on its own (more on that also another time). I am ever more relying on shallow knowledge about the frameworks and code, coupled to deep (but ancient) generic engineering insights. And as the effect of my knowledge becomes shallow, the risk of the LLM careening out of control and generating ‘poor’ patterns increases.
  • The second one is that in moments my intelligence is needed, I can be completely out of my depth. I have a very limited insight in what the consequences and risks are of the decision I make. The LLM may ask me for a decision, but before I can make one I need to dig in deep, or lose control. And at that stage, making decisions becomes harder because I have offloaded to the LLM. If I offload my thinking, I onboard risk. In general:

When an organisation offloads its thinking, it’s onboarding risks

I am specifically mentioning ‘organisation’ here, because when organisations are conscious about their risks they know they have to — as an organisation — compensate. And serious ones will. For now: I don’t see a lot of broad thinking about compensating for the risks of LLM-coding, the (imagined) advantages dominate the discussion.

The LLM generates large volumes of code. Really large. But as the engineer — or the organisation in general — I have to consume all that code. I need to check it, work with it, test it, think about it, and propose changes in architecture, behaviour (both of the system and tools in the project), and write that up in good prompts and other forms of ‘context‘.

The volume/speed advantage the LLM thus also directly leads to a form of mental overload, for me personally. This is related to the mental overload to the energy the receivers of AI-slop and AI-sludge have to spend, but it is actually independent of the quality of what you get. Unless the systems become so good that they can replace humans, which isn’t the case (and isn’t going to be the case either). Have a look at this:

The code that the LLM generated looked fine but was poor in the context of the project

Even with all the instructions I have given the LLM, it still has a hard time doing the right thing. Regardless if you agree with my approach to code quality, the issue here is that the LLM is not following them, or only following them in a shallow way. The result is that the code may not be slop, but it is still sludge. A lot of time and energy spent by both me and the LLM is addressing the code quality issues I detect. That illustrates that the LLM doesn’t really understand code quality, but that if I am in control I can make it generate better results. With the amount of code the LLM generates, this leads to a mental overload on my end, however.

Conclusion

I had Claude Code do a rough analysis on where its effort went the last seven months, based on the git repository and the LLM usage data.

August was partly vacation. September was spent on getting a Windows version of the application, getting Codex (abandoned now) to work, creating ‘harness’ tooling to help with improving code quality triggered by the IfSQ code inspection, so hardly any features and a lot of work (tests, inspections) that stayed outside of the LLM generation. Notice: the same amount of tokens cost (virtually!) half in October than what it (virtually) cost in July, much of this seems to have been efficiency improvements in Claude Fable and Opus. But what you see here is quite clearly that the amount of work on ‘quality’ is far from negligible.

I have, I think, functionally great results reached in a relatively short time. But keeping the top frontier LLM models from producing sludge — in large amounts — is extremely mentally tiring work and the architectural issues keep coming. Organisations will need to watch for a burn-out of their engineers. I know I will need to. And that is hard, because a software engineer is generally addicted to the rush of completion and progress (for which volume stands as an ever less valid mental shortcut)

Previously on the LLM-coding experiment:

• First report: Anthropic/OpenAI may be spending more than $1000 for every $100 you pay them (7 June 2026)
• Lab Note #1: Serious coding with LLMs. Lab notes 2026-09-25: Codex vs Claude Code, Usage Limit Resets (25 September 2026)
• Lab Note #2: Serious coding with LLMs. Lab notes 2026-09-27: Codex succeeds, Claude reviews the result. (27 September 2026)
• Lab Note #3: Serious coding with LLMs. Lab notes 2026-10-01: Codex and Claude generate a shared analysis (1 October 2026)
• Lab Note #4: Serious coding with LLMs. Lab notes 2026-10-13: Codex vs Claude on the same coding task. (13 October 2026)
• Lab Note #5: Serious coding with LLMs. Lab notes 2026-10-21: The throttling of subscriptions by OpenAI and Anthropic is really happening. (21 Oct 2026)
• Lab Note #6: Serious coding with LLMs. Lab notes 2026-10-27: A code audit of LLM-generated code: improving from ‘sludge’ to ‘vakwerk’. (27 Oct 2026)
• Lab Note #7: Serious coding with LLMs. Lab notes 2026-10-31: Teaser Demo of the LLM-coded EACMP application, and a quiz (31 Oct 2026)

Leave a Reply