







It's really easy to tend towards complexity as engineers. I think on some level, we love complexity. There are obviously bad types of complexity, but I think there are other types of it that we seek out, because there's something satisfying about wrapping your head around it; and I think a lot of that kind of complexity ends up in our programming languages.
Why embracing complexity is the real challenge in software today
In the midst of industry discussions about productivity and automation, it’s all too easy to overlook the importance of properly reckoning with complexity.


Routledge International Handbook of Complexity Economics | Ping Chen,
The Routledge International Handbook of Complexity Economics covers the historical developments and early concerns of complexity theorists and brings them into

</> htmx ~ Working With AI: A Concrete Example
In this essay, Carson Gross walks through a concrete bug fix in hyperscript to show where AI helped, where it fell short, and why keeping a knowledgeable human in the loop is what kept complexity in check.
The Compendium
A compendium of insights about complexity structured as inter-linked cards by Alex Komoroske
X : Do you think AI / vibe coding is not worthwhile? Me : Are you kidding? I was talking about conversational programming (what you call vibe coding) back in 2018. Of course, I think it's important.… | Simon Wardley | 44 comments
X : Do you think AI / vibe coding is not worthwhile? Me : Are you kidding? I was talking about conversational programming (what you call vibe coding) back in 2018. Of course, I think it's important. I think the approach we're using currently is flawed. X : Why? Me : Well, I could go on about the basics such as the medium is wrong (needs to be more image / whiteboard based rather than text) or how we're getting wrapped up in deterministic outputs (text based code) rather than realising the end outputs will eventually be non-deterministic models or we're still learning practices in this space especially with agents and how we rushing ahead into failure creating trust issues. There's a lot of messy stuff happening. But my real interest is with turning software engineering into an engineering discipline. X : Isn't it? Me : If I look at a map of decision making then testing (specifically TDD) is an engineering topic (see figure 1) but the development part is firmly a craft (see figure 2). If we want to make development an engineering subject then we need to learn from testing i.e. we should be building context specific tools (think a test suite) from lots of micro tools (think tests). See figure 3. X : And AI can help? Me : Oh, yes. In two parts - the construction of micro tools which helps us improve our ttA (time to answer) and in the construction of new hypothesis which helps us improve our ttQ (time to question). See figure 4. X : And is that happening? Me : Very slowly. Remember you have a multi billion dollar tool industry that doesn't want you creating tools and hence they're trying to flog you old tools with a skim of AI. X : But we need people selling pickaxes. Me : Sure. But they've been telling us that their pickaxes work everywhere ... making soup, you need a pickaxe with added AI. X : But coding is coding. Me : An electronic healthcare system is not the same as an online gambling site. The contexts are completely different. It's why the test suites are different and a test is nothing more than a micro tool. Why don't we compose our tool for that context out of micro tools ... just like testing? X : Because it's hard? Me: Pickaxe salespeople must love you. That's their marketing literature. Reminds me of the early days of Test Driven Development (TDD) where most people thought it was mad to build a test suite out of thousands of small tests. | 44 comments on LinkedIn
Growing Graphs
Experimental simulation of emergent complexity through graph-rewriting automata.

Teach Yourself Programming in Ten Years
The conclusion is that either people are in a big rush to learn about programming, or that programming is somehow fabulously easier to learn than anything else. Felleisen et al. give a nod to this trend in their book How to Design Programs, when they say "Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies." The Abtruse Goose comic also had their take.
Understanding is the new bottleneck
Agents can write code faster than we can absorb it. Here's why it still matters for humans to understand what they build — and some techniques for doing that efficiently: explainer docs, quizzes, micro-worlds, and shared spaces.

Understanding is the new bottleneck
Agents can write code faster than we can absorb it. Here's why it still matters for humans to understand what they build — and some techniques for doing that efficiently: explainer docs, quizzes, micro-worlds, and shared spaces.

Understanding is the new bottleneck
Agents can write code faster than we can absorb it. Here's why it still matters for humans to understand what they build — and some techniques for doing that efficiently: explainer docs, quizzes, micro-worlds, and shared spaces.

Programming (with AI agents) as theory building
Back in 1985, computer scientist Peter Naur wrote “Programming as Theory Building”. According to Naur — and I agree with him — the core output of software engineers is not the program itself, but the theory of how the program works. In other words, the knowledge inside the engineer’s mind is the primary artifact of engineering work, and the actual software is merely a by-product of that.

Cyclomatic complexity
Cyclomatic complexity is a software metric used to indicate the complexity of a program. It is a quantitative measure of the number of linearly independent paths through a program's source code. It was developed by Thomas J. McCabe, Sr. in 1976.
Performative Thinking? The Brittle Correlation Between CoT Length and Problem Complexity
Intermediate token generation (ITG), where a model produces output before the solution, has been proposed as a method to improve the performance of language models on reasoning tasks. While these reasoning traces or Chain of Thoughts (CoTs) are correlated with performance gains, the mechanisms underlying them remain unclear. A prevailing assumption in the community has been to anthropomorphize these tokens as "thinking", treating longer traces as evidence of higher problem-adaptive computation. In this work, we critically examine whether intermediate token sequence length reflects or correlates with problem difficulty. To do so, we train transformer models from scratch on derivational traces of the A* search algorithm, where the number of operations required to solve a maze problem provides a precise and verifiable measure of problem complexity. We first evaluate the models on trivial free-space problems, finding that even for the simplest tasks, they often produce excessively long reasoning traces and sometimes fail to generate a solution. We then systematically evaluate the model on out-of-distribution problems and find that the intermediate token length and ground truth A* trace length only loosely correlate. We notice that the few cases where correlation appears are those where the problems are closer to the training distribution, suggesting that the effect arises from approximate recall rather than genuine problem-adaptive computation. This suggests that the inherent computational complexity of the problem instance is not a significant factor, but rather its distributional distance from the training data. These results challenge the assumption that intermediate trace generation is adaptive to problem difficulty and caution against interpreting longer sequences in systems like R1 as automatically indicative of "thinking effort".

Performative Thinking? The Brittle Correlation Between CoT Length and Problem Complexity
Intermediate token generation (ITG), where a model produces output before the solution, has been proposed as a method to improve the performance of language models on reasoning tasks. While these reasoning traces or Chain of Thoughts (CoTs) are correlated with performance gains, the mechanisms underlying them remain unclear. A prevailing assumption in the community has been to anthropomorphize these tokens as "thinking", treating longer traces as evidence of higher problem-adaptive computation. In this work, we critically examine whether intermediate token sequence length reflects or correlates with problem difficulty. To do so, we train transformer models from scratch on derivational traces of the A* search algorithm, where the number of operations required to solve a maze problem provides a precise and verifiable measure of problem complexity. We first evaluate the models on trivial free-space problems, finding that even for the simplest tasks, they often produce excessively long reasoning traces and sometimes fail to generate a solution. We then systematically evaluate the model on out-of-distribution problems and find that the intermediate token length and ground truth A* trace length only loosely correlate. We notice that the few cases where correlation appears are those where the problems are closer to the training distribution, suggesting that the effect arises from approximate recall rather than genuine problem-adaptive computation. This suggests that the inherent computational complexity of the problem instance is not a significant factor, but rather its distributional distance from the training data. These results challenge the assumption that intermediate trace generation is adaptive to problem difficulty and caution against interpreting longer sequences in systems like R1 as automatically indicative of "thinking effort".
