The Clean Code Blog

by Robert C. Martin (Uncle Bob)

12 November 2013

This is not a political blog. This is a blog about the Software Industry; and the profound effect that its failure is having upon our society.

The Software Industry failed to deliver As a result, millions of people are being hurt. We did that, folks. It was our industry, our failure.

The Affordable Care Act (ACA) is one of the most massive public policy initiatives in American history. It was passed through both houses of Congress, and signed into law by the President of the United States. It is The Law of the Land; and it is being thwarted by the incompetence of the Software Industry.

Let me repeat that. A critical public policy is being thwarted, not by the failure of the policy, but by the failure of a web site. That’s a software disaster, folks. A big one.

If the media are to be believed, there are four million people whose health plans were cancelled when the ACA went into effect on October 1st. The Software Industry was supposed to have built a web site to help those people find new health insurance. By failing to get that web site working, the Software Industry has harmed those four million people; and the repercussions of that failure will be felt for decades.

Already, I have spoken to business people who, in the light of this failure, are showing reluctance to build new software. They say: “Will this be like” What they are really saying is: “Can the Software Industry be trusted to do anything?”

Perhaps you disagree. Perhaps you think this was a failure of government, or of management. Of course I agree. Government failed and management failed. But government and management don’t know how to build software. We do. We were hired because of that knowledge. And we are expected to use that knowledge to communicate to the managers and administrators who don’t have it.


In the hours before the Space Shuttle Challenger blew up, killing seven brave astronauts, a battle was being fought to save their lives. The engineers who knew that it was too risky to launch worked through every official channel to stop that launch. They wrote memos. They held meetings. They raised red flags. They even refused to watch the launch.

But the managers and administrators overrode them, and launched anyway – for political reasons: Vice President George H. W. Bush was going to be there to observe the launch. By their horrific incompetence, Christa McAuliffe, a school teacher who was poised to conduct the first grade-school lesson from space, was killed before the eyes of millions of school children who were waiting for that lesson.

It’s easy to blame the managers. It’s appropriate to blame the managers. But it was the engineers who knew. On paper, the engineers did everything right. But they knew. They knew. And they failed to stop the launch.

They failed to say: NO!, loud enough for the right people to hear.

Over the cliff.

On the project, there must have been some programmers who knew that the October 1st launch was going to be a disaster. There must have been some QA people who knew. There must have been architects, project managers, technical leads, and group leaders who knew that we were on the verge of one of the largest, and most public, software failures in the history of the world. Somebody knew!

Why didn’t they say NO!? Why didn’t they say it loud and clear? Why wasn’t the train stopped before it ran off the tracks and plunged over the cliff? Why didn’t somebody pull the emergency cord? Why wasn’t there somebody on Fox News, ABC, MSNBC, or CNN, telling us that nobody had tested the site, that they weren’t ready, that it was going to be a disaster?

Just following orders.

Perhaps you think I’m being unfair. After all, these folks were just doing their jobs. Their managers told them what to do, and they did it. Some of them may have told their managers that they were uncomfortable with the October 1st launch. Some of them may even have banged on desks, published memos, and raised red flags; only to be overridden by their managers. And so they launched. They were just following orders.

In the U.S. military, you can be sentenced to death for disobeying a direct order. (Article 90). But if you read that article closely you’ll notice a critical word: Lawful. You are not required to obey an unlawful order. Indeed, if you do obey an unlawful order, you can, and should, be prosecuted.

Never do Harm.

So what is our law? To what principles do we adhere? What orders must we refuse to follow? It seems to me that the Hippocratic Oath is a good starting place for us. Allow me to slightly reword one stanza of that Oath to fit our purposes:

I will create software for the good of my users according to my ability and my judgement and never do harm to anyone.

Harm has been done to millions of people. We of the Software Industry allowed that harm to take place by following unlawful orders.


If I had to define professionalism in once sentence, I’d say:

Professionalism is the willingness to refuse to obey orders that do harm to others.

Or, perhaps this is a better wording:

A professional has the knowledge and responsibility to say: “No!” as loudly as necessary to prevent harm.


If I were in government right now, I would be leery of starting another big software project. I’d also know that big software projects are going to be necessary as our civilization gets more and more complex. So, if I were in government right now, I’d be thinking about laws to regulate the Software Industry. I’d be thinking about what languages and processes we should force them to use, what auditing should be done, what schooling is necessary, etc. etc. I’d be thinking about passing laws to get this unruly and chaotic industry under some kind of control.

If I were the President right now, I might even be thinking about creating a new Czar or Cabinet position: The Secretary of Software Quality. Someone who could regulate this misbehaving industry upon which so much of our future depends.

This is a warning, not a recommendation! I don’t think a czar or secretary is the right solution. And maybe nobody in government has thought of this yet. Maybe. But how many more debacles will it take before it does?