This Rich Hickey quote from 2011 is quite relevant in 2026:

"I think we're in this world I like to call guardrail programming. Right. It's really sad. We're like, I can make change cause I have tests. Right? Who does that? Who drives their car around banging against the guardrails, saying whoa, I'm glad I've got these guardrails because I'd never make it to the show on time."

https://www.youtube.com/watch?v=SxdOUGdseq4#t=16m08s

"Simple Made Easy" - Rich Hickey (2011)

YouTube
@sanityinc used the quote two day ago!
@defuneste I think it lands differently now than when it was first made, for then-unimaginable reasons
@sanityinc yeah, the whole tangled/untangled is also more relevant now ....

@sanityinc @defuneste Yeah, I was active in both the Clojure and TDD worlds at the time, and it was clear Hickey was talking about a different kind of testing than I was doing. The kind I’d been doing in the ‘80s, where testing was not used as a tool for thinking about a problem or the design of a solution.

I had roughly the same attitude as Hickey until I sat down and used TDD on a serious project. I don’t know if he ever has. I’ve been out of Clojure for over a decade (!)

@sanityinc @defuneste It’s sort of an interesting meta-commentary. Both of us thought we could discard a methodology by reasoning about it rather than trying it. I was lucky that @RonJeffries argued me into giving it a try.

Part of a career of reasoned-through conclusions that didn’t stand up against experience. Eventually I figured out that maybe I’m not smart enough to get it right by sustained cogitation, so I needed to adopt an approach more driven by rapid feedback from the world.

@marick @sanityinc @RonJeffries

Part of starting with tests can help defining the problem but in my small experience this is not enough 🤷‍♂️

@defuneste @sanityinc @RonJeffries Oh, sure. One tool is not enough. One must also take showers.¹ And, maybe, even, talk to the people with the problem.

¹ I was once in a little workshop where Guy Steele² said he got all his good ideas in the shower. My immediate reaction was “He must take a *lot* of showers.”)

² Legendary Lisper. Co-inventor of Scheme. Etc. https://en.wikipedia.org/wiki/Guy_L._Steele_Jr.

@marick @sanityinc @defuneste @RonJeffries This goes right to the heart of 'but TDD isn't automated testing, it is using little code examples to guide your design iteratively and provide feedback'. 'test-driven' is such a shockingly misleading term for a design method guided by runnable examples.

@marick @sanityinc @defuneste @RonJeffries and of course TDD came out of the dynamically typed world of Smalltalk.

I can understand the FP/static typing argument of 'Why use tests when you can prove everything with types?' But I don't get rejecting TDD in Clojure just because you can repl-massage a program into existence.

Perhaps the confidence comes from the fact you are composing lots of tiny functions that are independently easy to reason about. But I'm still not convinced.

@tastapod I'm also fairly sure that Hickey would have refined new abstractions by, in part, writing examples that used them, not necessarily 100% in his minds eye from the hammock.

@marick @defuneste @RonJeffries

@sanityinc @tastapod @defuneste @RonJeffries Perhaps. I was in the audience for the Hammock talk and, as he said on the last slide, it was a rant. He was staking out an extreme position. However, as so often happens, the need to valorize something thought underappreciated leads to a ratcheting effect of disparaging everything else.

Which, because of the hero worship our field is prone to, leads to a locked-in absolutist position.

@sanityinc @tastapod @defuneste @RonJeffries In personal communications with him and people close to him, I got no sense that he thought of tests as having anything to do with examples-for-learning.

Later, that sort of example was supposed to be explored at the repl, perhaps to be saved as a test (with tool support). Why that was supposed to be better than writing the example in the form of a test to start with was never clear to me. (1/2)

The rhetoric was very rah-rah, heavy on emotion, light on walking through considerations and alternatives.

But that was around the time I moved from Clojure to Elixir, so I don’t know how repl-driven development panned out. (2/2)

@tastapod @sanityinc @defuneste @RonJeffries I’d rather allude to the idea of a second marriage being a triumph of hope over experience. (Samuel Johnson)

You start programming. Your brain wants to think that pure cogitation is sufficient. Life teaches you otherwise.

You discover a type of programming that’s more math-ey and uses small functions. This gives you an excuse to hope that, this time, you can live comfy in the world of Pure Thought.

@tastapod Agree, and I think Hickey got heat at the time, exactly because we didn't relate to his straw man view of TDD. My point in posting the quote is that there's now a belief that computer-generated tests + computer-generated-code is sufficient to obtain good software, and I think that's related to the prevalent view of TDD as being about guardrails. Maybe it's the same underlying issue of not enough people thinking about design and appropriate abstraction at *any* step along the way.

@marick @defuneste @RonJeffries

@tastapod @sanityinc @defuneste @RonJeffries Examples make a dandy governor for people temperamentally inclined to over-abstraction. (Waves.)

Kind of a Watt Governor¹ for our minds, which after all Freud analogized to a steam engine.

¹ https://en.wikipedia.org/wiki/Centrifugal_governor

Centrifugal governor - Wikipedia

@marick @sanityinc @defuneste @RonJeffries

This reminds me of a comment from Devon Eriksen: "An alternative to rationalism was needed, you see, because reason is absolute bollocks at deciphering the universe."

@vocumsineratio @sanityinc @defuneste @RonJeffries That’s relevant to my current spittle-flecked tirades against Karl Popper. He is not an empiricist, but rather a variant of idealist who compensates for the inability to have deductive-logic style certainty in science with the comforting certainty of a rigid methodology. (1/3)
His talk of falsification obscures the fact that he cares little for actual observations of the world – you don’t learn from observation – it merely signals to the theorist that (and perhaps where) the theory is wrong. Thereafter, it’s the internal logic of the theory that drives theory change. (2/3)

Essentially, a falsification says “something’s wrong” and, perhaps, “right around here,” but he’s explicit that such observations aren’t important beyond that – they don’t have causal power over *how* the theory is fixed. That’s the province of the ungovernable genius of the Great Scientist.

<end spittle-flecked rant> (3/3)

@marick @sanityinc @defuneste @RonJeffries OK, with that toot you have just convinced me that I need to give these foresaken LLM abominations another try. Not expecting great things.

@thirstybear @marick @sanityinc @defuneste @RonJeffries

You should feel free to reexamine any belief at any time for reasons you find compelling, of course.

But in areas like this I apply Bayesian probabilistic reasoning, where I take (1) what I already know, and combine it with (2) additional new evidence, to determine (3) how much it makes sense to change my beliefs. With LLMs, it's generally "not much," with all the claims that "Oh! The new models fix EVERYTHING!" when they don't.

@thirstybear @marick @sanityinc @defuneste @RonJeffries

Also, I think it reasonable, practical, and really necessary to apply some amount of "the halo effect" and even some "argument from authority," when the accepting input from someone who has *relevant* experience and authority, who has consistently demonstrated competence and correctness in the past.

@JeffGrigg @thirstybear @sanityinc @defuneste @RonJeffries Heuristics are better than rules.
@marick @JeffGrigg @thirstybear @sanityinc @defuneste
The code is more what you'd call guidelines than actual rules ...
@sanityinc you know we used to say, on the old internet, "never trust a car analogy" tho
@cms never heard that one before, but it makes sense
@cms does this mean I'm not old, actually? huge if true
@sanityinc I fear it probably means I'm super-old 😭

(Also, I think Rich Hickey is probably a more authoritative source of advice.)
@sanityinc Even if you accept that guard rails are so other people don't crash into you it is still pretty unsatisfying.
@sanityinc, thank you! I was looking for that quote recently and gave up the search. What a nice coincidence!
@RePierre I came across it in a comment on this issue, and the context really gave it new meaning: https://github.com/tldraw/tldraw/issues/8082
Move tests to closed source repo · Issue #8082 · tldraw/tldraw

Move the test suite out of the open source tldraw/tldraw repo and into the closed source repo. Context The tldraw monorepo currently contains ~327 test files across unit, integration, and e2e tests...

GitHub