From magic to literacy: ask LLMs for tools, not answers

In 1968, people talked about a software crisis. That crisis only grew larger. Today, we are creating software super-linearly, while remaining unable to recycle old systems. We are behaving as unsustainably as the plastic industry.

We got good at writing code. We can read pieces of it, but we cannot quite make sense of larger systems. This is remarkably similar to functional illiteracy. In an illiterate world, myths abound and magic is praised. We can remedy that by educating our ability to read in this new world we are engineering.

LLMs are exciting and useful tools. But they are magic, and they are not the answer to how we read. They can be accelerants of good reading, just like they can be accelerants of myths. It's up to us.

In chapter 6 of Rewilding Software Engineering, Simon Wardley and I write about an experiment in which we asked the LLM for something simple, like a graph of dependencies. When we asked it to produce it directly, it confidently produced a remarkable set of components and dependencies. But when we compared it with the actual system, we found 5–30% missing entities (shown in red in the visualization).

A visualization of components and their dependencies. In red, we highlight the parts that the LLM missed.

Used like that, LLMs produce only opinions, not engineering answers. Worse, those opinions can only be evaluated if the evaluator knows the answer, which then leads to an apparent catch-22 situation as people ask the LLM because they do not know the answer.

Luckily, there is a way out of this. We did another experiment in which we took the same prompt details, but changed what we asked for: instead of asking for the answer, we asked the LLM to produce the code that we could execute to find the dependencies. It worked remarkably well.

Most questions about existing systems require deterministic answers and should be provided by deterministic tools. Whether these tools are built manually or through an LLM is irrelevant. Our aim should be to eliminate the need for magic to get answers about our world. We should be able to explain what the tool does to ensure we know how accurate and representative it is. We should aim to explain both how our systems run our world and how we explain those systems.

Once we do that, we will have become literate, which will pave the way for enlightenment and for an exit out of an ever-larger crisis.