During the Second World War, both the Japanese and United States armies set up bases on remote islands in the Pacific Ocean. The islands’ inhabitants, who had previously been isolated from the larger world around them, marveled at the strange flying machines landing in their fields. The men disembarking from these machines brought cargo: food and materials the islanders had never seen. To us modern people, shovels, blankets, lanterns and even food in cans are perfectly normal. To the islanders, they were wonders.
As the war progressed, the natives observed the newcomers raising towers, building small fires in the fields where the flying machines would land, wearing strange clothes and marching in formation around the fields. The newcomers shared some of their cargo with the natives, and did their best to explain how to use it and where it came from.
When the war ended, the newcomers flew away in their machines, leaving behind whatever cargo they no longer needed. The natives were delighted to have it. They also became somewhat dependent on it.
As their supplies dwindled, they began to wonder how to get more. They went back to the fields where the machines had landed and waited for them to return. They even built fires in the fields thinking this would attract more airplanes. They used bamboo and palm fronds to build replicas of the aircraft thinking this too would lure them back. They set up towers and sat in them with coconut halves over their ears, imitating what they had seen the newcomers do. They even got together and marched around the fields. All this was supposed to bring back the airplanes so they could have more cargo.
Modern Cargo Cults
It would be easy for us in the 21st century to laugh at the naiveté of the islanders. They assumed that by copying the appearances of what the newcomers did, they would get the same results. Then again, we "modern" people do the same thing all the time. “If I wear these clothes, I’ll be an athlete!” “If I drink this scotch, I’ll be intelligent and sophisticated!” “If I smoke this cigarette, I’ll be mature and sexy!”
Even in software, we succumb to adopting poorly understood practices in the false certainty that they are a crucial element of success. Waterfall, Spiral, CMM, Six Sigma, Iterative Development and even Agile have done enormous damage to organizations who adopt their appearances without understanding how they work or even what they are intended to accomplish.
There is a real danger that Software Craftsmanship itself could degenerate to the same Cargo Cult mentality. TDD could produce worthless and expensive tests. Pair Programming could become a means of indoctrination and subordination. Refactoring could turn into nothing more useful than self-absorbed tinkering.
One could argue that by understanding and living by the principles in the Manifesto of Software Craftsmanship, we will steadily increase the quality of our work. But these principles are almost purposefully vague and open to debate. We need one more practice to stay true to our Craft.
Richard Feynman’s Commencement Address
At the same time that Pacific Islanders were finding out about the world beyond their shores, a brand new Ph.D. physicist was working alongside the most prominent physicists in the world. Richard Feynman quickly gained a reputation of pursuing the truth despite where that pursuit led him. He was specifically sought out by Hans Bethe, John Von Neumann, Niels Bohr and other Nobel Prize winners because he would help them think through their ideas and was not bashful about saying where they fell short. He could do this because he did the same thing with his own ideas. He knew that nature did not care who exposed her principles, and that the truth would eventually come out.
While he felt an obligation to explain to the students what was missing, he was concerned that doing so might be as difficult as explaining to the South Pacific Islanders how they could get cargo. Instead he covered something he noticed was not taught directly in science courses: the art “of not fooling ourselves - of having utter scientific integrity.”
As an example, Dr. Feynman described those who repeated Robert Millikan’s famous oil drop experiment to measure the charge of the electron. Their results gave a higher value than what Millikan found, but they fooled themselves into thinking they were doing something wrong. Had they reported the results as they found them, rather than shading them closer to Millikan’s, they would have discovered sooner that, despite Millikan’s genius in setting up the experiment, one of his assumptions was wrong.
We fool ourselves when we become so attached to the outcome of what we do, that we neglect what is happening right in front of us. We are so absorbed in creating an image for ourselves, we forget to check whether that image matches reality.
Scientific Integrity and Software Craftsmanship
When Dr. Feynman spoke of “scientific integrity”, he meant more than mere honesty. This kind of integrity means giving people the ability to judge for themselves the value of our work rather than trying to sell it to them. It means revealing what works and what doesn’t work. Showing both our interpretation of what we observe, and other conclusions that could come from the same observation. It means describing both the causes that explain what we see, and other explanations we thought of and eliminated.
In our devotion to our Craft, we can forget that we are part of a Science. What makes science valid is its universality. Experiments and observations can be made by anyone with the right equipment and training. Similarly, for the principles on which our Craft is based to be valid, they must be universal. Properly applied, anybody should be able to benefit from using them.
Before anyone can realize the value of Software Craftsmanship for themselves, they need to judge the value of Software Craftsmanship for themselves. And for them to make that judgement effectively, we need to give them all the information we have: both the benefits and the costs.
This is not easy. Imagine what would have happened to one of the islanders if they had gone to their chief and said, “Boss, the planes aren’t landing.” The chief would have told them to get better coconuts, or threatened to banish them from the island for insubordination.
As Craftsmen, we aren’t about making ourselves look good. Our goal is to find what works. This means, as Dr. Feynman explains, that if we want to test a theory or explain an idea, we need to publish the results whether or not they support the theory or the idea.
Whenever we describe something we have done, we have to show both how it helps and how it hinders. When we propose a solution, we have to include both the advantages and the drawbacks of the solution. We also need to describe other solutions and explain why we did not choose them. When we talk about our practices, we need to cover both the costs and the benefits. We need to disclose what we know about when they will work and when they will not work.
People pressure us all the time to tell them what they want to hear. Some clients want to believe that we can always do an amazing amount of work for very little money. Some of our peers only want to hear how wonderful their new ideas are and what a great job they are doing. And believe it or not , there are supervisors and managers who want us to adopt their practices and make them work, no matter how difficult or counterproductive they may be.
This is where courage comes in. It can be hard to resist this pressure and speak up about what is not right. But if we keep quiet, or worse lie and say everything is wonderful, we lose our integrity. And without integrity, we cannot call ourselves Craftsmen.