Try the same thing again... and again (sometimes)

Development can be different from other aspects of life. For example, most debugging is based on the principle of trying something once, observing the result, and reacting. Fast debugging often involves some modification of a binary search. The binary search is based on the principle of trying things only once, and then moving on. Trying the same thing multiple times is generally a waste of time in development. The way to efficient debugging, and efficient code is to only touch something once. Iterate once, try once. The next time will be the same.

I was watching a documentary. Wolves were hunting ducks in a knee deep puddle. There were adult ducks and baby ducks. As a wolf approached, the adult duck would fly away and the baby duck would dive down into the muddy water and disappear. The plight of the wolves looked hopeless. The ducks could see the wolves coming. As the wolf approached, the duck moved to safety through the air or water. It looked comical. The wolves had no chance. The cute little wolf pups the adults were hunting to feed would starve, and the cute little ducklings would live and grow.

At this point if wolves were developers, they would have stopped. The wolf developers would have regrouped and thought about how to implement camouflage, create better team coordination, train for speed, or maybe refactor their diets. It turned out the wolves were not developers, and they kept trying the exact same thing over and over again. A definition of insanity is doing the same thing and expecting different results. The wolves were not aware of this. In a minute or so, one of the ducklings - maybe because it was young and inexperienced or tired - ended up in the wrong place at the wrong time. With its strong jaws, the wolf plucked the duckling from the water. The duckling died and the wolf pups lived.