Author Archives: Graham

About Graham

I make it faster and easier for you to create high-quality code.

Is spec-driven development the end of Agile software development?

A claim that I’ve seen on software social media is that spec-driven development is evidence that agile was a dark path, poorly chosen. The argument goes that Agile software development is about eschewing detailed designs and specifications, in favour of experimentation and … Continue reading

Posted in agile, AI | Leave a comment

On the value of old principles

People using AI coding assistants typically wrestle with three problems (assuming they know what they’re trying to get the model to do, and that that’s the correct thing to try to get it to do): (It’s important to bear in … Continue reading

Posted in AI, design, OOP | Leave a comment

Vibe coding and BASIC

In Vibe Coding: What is it Good For? Absolutely Nothing (Sorry, Linus), The Register makes a comparison between vibe coding today and the BASIC programming of the first generation of home microcomputers: In one respect, though, vibe coding does have … Continue reading

Posted in AI, history | Leave a comment

Essence and accident in language model-assisted coding

In 1986, Fred Brooks posited that there was “no silver bullet” in software engineering—no tool or process that would yield an order-of-magnitude improvement in productivity. He based this assertion on the division of complexity into that which is essential to … Continue reading

Posted in AI, software-engineering, tool-support | 2 Comments

Tony Hoare and negative space

The Primeagen calls it Negative-Space Programming: using assertions to cut off the space of possible programs, leaving only the ones you believe are possible given your knowledge of a program’s state at a point. Tony Hoare just called it “logic”, … Continue reading

Posted in history, software-engineering | Tagged | Leave a comment

When did people favor composition over inheritance?

The phrase “favor composition over inheritance” has become one of those thought-terminating cliches in software design, and I always like to take a deeper look at those to understand where they come from and what ideas we’re missing if we … Continue reading

Posted in history, ooa/d, OOP | 3 Comments

LLMs and reinforcement learning

My reflection on the Richard Sutton interview with Dwarkesh Patel was that it was interesting how much the two participants talk past each other, and fail to find common ground. Particularly that they couldn’t agree on the power of reinforcement learning, when … Continue reading

Posted in AI | Leave a comment

Prompting software or supporting engineering

As we learn to operate these new generative predictive transformers, those of us in the world of software need to work out what we’re doing it for. The way in which we use them, the results we get—and the direction … Continue reading

Posted in AI | Leave a comment

Unintended consequences

As the shift in content of this blog has made abundantly clear, for the last five years I’ve been doing a PhD. I’ve also been working full-time, so that research and study has basically taken up all of my spare … Continue reading

Posted in advancement of the self | Leave a comment

Is Foundation a Utopian vision?

Important: while I’m only talking about the Foundation books in vague details here, I will end up summarising a number of key points through the whole series. If you haven’t read them, and intend to, I recommend not reading this … Continue reading

Posted in Fiction | Leave a comment