Darryl Taft’s article “Toward a Discussion of Morality and Code” is quickly side-tracked into an exhortation that software developers should be moral people (recycle your punch cards, yo!). Not discussed is the more interesting question of whether there is a morality within coding decisions and, if so, what the higher moral principles are.
The agile community likes to say “deliver client value” and I quite prefer that to the old hacker-ish value of “write elegant code,” but client value falls short of being universally prescriptive.
Let’s say that you’re striving to bring online a complex system. The client is threatening to pull out, your team is working long hours, but there are kinks right in the middle of the processing. You believe by adding complexity and special cases you can solve the immediate problem. But on the other hand, the system ought not to be in that state by that point, the data should be thoroughly de-funked. As a professional, you know that you’re seeing a symptom of a deeper problem and that by adding complexity, all you’re doing is masking the pathology.
What’s the moral thing to do, bearing in mind that the client’s threat to shut down the project is serious?