TDD (Meta) Pro-Tip: Grasp the judgment premise by the horns and do not let it go, in every single one of these pro-tips.
Here is the judgment premise, taken from Five Underplayed Premises Of TDD: "We happily rely on individual humans using their individual judgment."
Imagine if there was a formulaic way to program computers. Imagine there was a procedure you could invoke that would algorithmically create software to order, software with no bugs, no inefficiencies, only pure crystalline value straight to the order of the humans who want it.
It would be like a jack-in-the-box toy. A cube-shaped thing with a little handle on the side, and you turn it and turn it and then, surprise, exactly the software you wanted comes popping out with a creepy little clown face and two hands to do your bidding.
THE SOFTWARE JACK-IN-THE-BOX DOES NOT EXIST AT THIS TIME. There is no human-free, algorithmic, deterministic, crank-turning, rule-driven, machine for making software.
It does not exist. It may never exist, but that’s irrelevant, because it certainly does not exist now.
If you’re gonna make software, you’re gonna use humans, and you’re gonna use those humans precisely because you need their human ability to make decisions under incomplete, hectic, non-mechanical, complex (math-sense), fuzzy, vague, and high-pressure circumstances.
And what’s another name for that human ability? "Judgment". When we talk about the judgment premise, we’re talking about taking action in a world in which highly-structured mechanical rules do not work.
Judgment has lots of near synonyms: feel, intuition, locality-of-context, experience, style, taste, heuristic, informed guess. We could keep going for a while.
I share these muses that I call "Pro-Tips". I do it because I like doing it. I feel I am justified in doing so. I have been using TDD to make my living for twenty years. That makes me more or less literally a TDD Pro.
I am glad people enjoy them, and glad sometimes on the days where I think I might have helped someone by offering them.
But TDD is not a software jack-in-the-box. My muses are in no way capable of being or intended to be the foundation of such a thing.
They are not rules, and I am not describing a machine for writing software. I, personally, don’t believe such a machine is possible — or more correctly, that a machine that could do that would still be a machine.
I don’t advocate unbreakable rules for human decision-making. I don’t follow them myself, and — it’s a nasty topic that will enrage some of my followers — I don’t encourage instruction by "training wheels" or "shu-rules" or anything of the sort.
Do I have unbreakable rules? Yes, two of them: 1) Always suspect "always" and "never". 2) Always put the cornbread in the bottom of the bowl under the bean soup.
And that’s pretty much it.
Please read the pro-tips not even as rule-proposals, let alone actual rules. They are not about minimizing human judgment in any way. They are not, in particular, suggestions to ignore your local context and your local experience. They’re the furthest thing from that.
Try thinking of them like this: here’s a guy with 40 years down in the silicon mines who shares extemporary prose about how — paraphrasing Rita Mae Brown — my judgment has come from my experience which has come from my bad judgment.
So give yourself (and me) a break: read them as possible openings for you to step in ways you hadn’t thought of before, not efforts at universal generalized mechanism for making software.
And have a strangely valuable Saturday!