Analogy is at the core of cognition, according to Douglas Hofstadter.
Ultimately, programming is hard. Often, we are smart, so we succeed. TDD is there to help us out when we’re not so smart. Kent Beck (who basically invented TDD) uses the metaphor of lifting a bucket of water out of a well with a rope: when the well isn’t too deep, and the bucket isn’t very full, it’s easy. And even lifting a full bucket is pretty easy at first. But after a while, you’re going to get tired. TDD is like having a ratchet that lets you save your progress, take a break, and make sure you never slip backwards. That way you don’t have to be smart all the time.
Source: Praise for Test-Driven Development with Python
Software Vise: “When we have tests that detect change, it is like having a vise around our code. The behavior of the code is fixed in place. When we make changes, we can know that we are changing only one piece of behavior at a time”.
Source: Working Effectively With Legacy Code
When meetings are the norm, the first resort, the go-to tool to discuss, debate, and solve every problem, they become overused and we grow numb to the outcome. Meetings should be like salt, sprinkled carefully to enhance a dish, not poured recklessly over every forkful. Too much salt destroys a dish. Too many meetings can destroy morale and motivation.