The Crooked Timber Of Software Development

Sunday, 7 Aug 2005

Out of the crooked timber of humanity no straight thing was ever made.
Immanuel Kant

Imagine you are a surgeon. You are stitching a wound closed at the end of a major procedure, when you are approached by the chief surgeon, clad in theatre garb. He explains that, inkeeping with recently introduced hospital policy, you are required to use a cheaper, generic brand of suture material, rather than the more common, and more expensive, you are accustomed to using. He orders you to undo the stitching you’ve done, and redo it using the generic brand.

Now you are in an ethical quandary. You know that the cheaper suture material is not of the same strength and quality as the usual type. You also know that it is a false economy to skimp on sutures, given that the amount to be saved is trivial, but the increased risk to the patient is decidedly non-trivial. Further, it seems unconscionable to be miserly on such critical materials. But on the other hand, the chief surgeon wields a lot of political might in the hospital, and it would no doubt be a career-limiting move to ignore his instruction. So what do you do?

As a health professional, there is simply no question. You are legally and ethically obliged to act in the best interests of the patient and there are serious consequences if you fail to do so. The penalties for malpractice include financial, legal and professional remedies. You can be fined, sued for malpractice, or struck from the register and rendered unable to practice. In the light of the system’s support and enforcement of good medical practice, you complete the stitching using the standard suture material, then express your concerns to the chief surgeon. If you don’t get satisfaction, you can take the matter further.

Now let’s examine a similar situation in our own industry. Suppose a software developer is trying to decide which of a set of competing technologies should be used on a project. One technology stands out as clearly superior to the others in terms of its suitability to the project’s circumstances. Upon hearing of the technology chosen, the company’s senior architect informs the developer that they have made the wrong decision, although they cannot explain why that is the case. The architect directs you to use a technology you know to be inferior, and makes it clear that it would be a career-limiting move to ignore his instruction. Again, what do you do?

My observations over the last twelve years working as a software developer leave me in no doubt what the probable outcome is. You shake your head in disbelief, and use the technology you are instructed to use, knowing that the project, and the project sponsor’s, best interests have just been seriously compromised. Why is the situation so different from the previous medical scenario? The basic answer is this: medicine is a profession, but software development merely an occupation.

A Profession Is More Than An Occupation

As it is used in common parlance, the word “profession” refers to the principle occupation by which you earn an income. But this is not its true meaning. A true profession has at least the following characteristics1:

You will see that software development has none of these elements. Anyone, regardless of ability, education or experience can hang out a shingle calling themselves a “software developer”, without challenge. Worse, practitioners may behave in any manner they choose, without restraint. The strict ethical requirements of a medical practitioner aim to ensure that the patients needs are best served. In the absence of such requirements, a software developer is free to scheme, manipulate, lie and deceive as suits their purpose – consequently we see a great deal of exactly this type of behavior in the field.


The key concept in any profession is that of integrity. It means, quite literally, “unity or wholeness.” A profession maintains its integrity by enforcing standards upon its practitioners, ensuring that those representing the profession offer a minimum standard of competence. Viewed from the perspective of a non-practitioner, the profession therefore offers a consistent promise of a certain standard of work, and creates the public expectation of a certain standard of service.

Individuals, also, are required to act with integrity. It is not acceptable for them to say one thing and do another e.g. to promise to always act in the best interests of a patient or client, but then let personal interests govern their action. What is said and what is done must be consistent.

This cultural focus upon integrity is entirely missing from the field of software development, and demonstrates the vast gap in maturity that exists between our occupation and the true professions. If we are ever to make a profession of software development, to move beyond the currently fractured and uncoordinated group of individuals motivated by self-interest, with little or no concern for the reputation or collective future of their occupation, then some fundamental changes in attitude must occur. We must begin to value both personal and professional integrity and demonstrate a strong and unwavering commitment to it in our daily professional lives.

Think about it – what are your ethical and professional obligations in your current position. Are you fulfilling them? Look to ethical codes such as those offered by the ACM and the IEEE-CS, even if you are not a member of these societies. Although not legally binding, they at least demonstrate the sorts of concerns you should be championing in your everyday work. You will find that their central focus is upon always acting with integrity; always representing the best interests of the client. Specifically, you will note that the following behaviors, as commonplace as they are amongst developers, are antithetical to ethical conduct:

There’s no denying that acting ethically can have a personal cost, perhaps quite a profound one. It would be naïve to think that attempts to contradict or combat unethical behavior are not likely to meet with some attempt at retribution. Even in professions with legally binding codes of ethics, this is the case. In software development, where it is a moral free-for-all it is particularly so. Raising ethical objections, voicing unpopular facts, standing up for the client’s rights where they conflict with some manager’s self-interest – all of these actions bring a very real risk of retribution from offended parties, that may include losing your job. Because ours is not a true profession, there is no protection – legal or otherwise – for a developer who speaks the truth and in so doing defies authority. Whoever is most adept at bullying, intimidation and political manipulation is likely to hold sway.

I suspect that more than a few of the incidents we have recently seen involving the termination of bloggers for alleged indiscretions on their blogs have been excuses for employers to remove inconvenient employees who threaten the status quo, ethical blemishes and all. Although superficially plausible reasons may be offered for such action, they may well be nothing more than an excuse for retribution against the employee for challenges they have made to the employer’s unethical behavior.

There Was A Crooked Man

In assessing the personal cost of ethical action , it helps to maintain a broader perspective. In our industry, jobs come and go like the seasons. Due to the prevalence of contract work, many software developers will likely have dozens of employers in their careers. Rather than viewing our work as a series of unrelated engagements, I believe we need to view our efforts as part of a larger process – the maturation of an occupation into a true profession. Seen from this angle, the significance of any particular job (or the loss of it) is lessened and the importance of the over-arching principles becomes more obvious.

As they say, the chain is only as strong as its weakest link. The strength of our reputation and worth as a burgeoning profession is therefore dependant upon the strength of the individuals commitment to maintaining a high personal standard of ethics. The integrity of the whole is contingent upon the integrity of the parts.

Some years ago I read the following statement, which for its truth and boldness has stuck with me ever since:

The best managers are the ones that come into work each day prepared to lose their job.

In other words, unless you remain willing to walk away from a job, the threat of termination can always be used against you, and as leverage to encourage or excuse unethical behavior. The same reasoning applies to developers as it does to managers. The same ethical obligations and the same obstacles to fulfilling them are present.

In 1985, David Parnas2 resigned his position as member of a U.S. Defense Department Committee advising on the Strategic Defense Initiative (SDI). He felt, with good reason, that the goals set for the SDI were entirely unachievable, and that the public was being misled about the programs potential. Others urges him to continue, and continued with it themselves, even though they shared his beliefs about the feasibility of the programs fundamental objectives. They reasoned that, even though the desired outcomes wouldn’t be achieved, there was good funding to be had that might be put into ostensibly “contributing efforts”, and the opportunity was too good to miss. When Parnas resigned, he wrote a series of eight papers outlining both his reasons for doing so, and the fundamental issues about software professionalism that the SDI issue had bought to light. Unfortunately, he have very few men of his quality in our occupation.

Parnas summarized a professional’s responsibility in three statements, which I conclude with here:


  1. After The Gold RushSteve McConnell, Microsoft Press, 1999
  2. Software Fundamental: Collected Papers by David L. Parnas — Addison Wesley, 2001