First, Do No Harm: A Hippocratic Oath for Software Developers (2004)
queue.acm.org
queue.acm.org
And this part:
> Loss of control, loss of intellectual property, unsatisfactory performance, hidden costs, and hard-to-obtain legal remedies are the harm that can occur when things go wrong when projects are outsourced.
Yes, it would be a real tragedy if intellectual property (sic!) was violated. Also, suggesting that someone from outside the US is more likely to give you unsatisfactory performance is simply racist.
Many of the clients I've had have had bad experiences outsourcing to local development agencies that didn't practice any offshoring.
See Hertz vs Accenture [^1](maybe Accenture offshores, but they wouldn't have had to in order to do such a bad job)
[1] https://www.theregister.co.uk/2019/04/23/hertz_accenture_law...
At this point I have grown weary of every article proposing some sort of professionalization. At this point I want to shout to everyone writing them "Stop trying to professionalize code to your gatekeeping standards already!".
From the number of failed outsourcing attempts I suspect unsatisfactory performance is true though for reasons not on them - organizational, communication and cultural barriers rather than lesser merit. The threats there aren't even on the software engineers but the management making the decisions! The only thing they could do to "stop" that is to work for free which was unreasonable to expect from even priests and would remain utterly stupid blame shifting.
Are you saying that there are no agreed upon characteristics of code (apart from being able to run) that together comprise the notion of code quality?
As for code quality it is depends upon the domain, scale, and situation. Some things are objectively bad but even bad may be complex. Hard tested COBOL legacy code that was old when the current veterans started may be hard to comprehend, close to immutable but utterly reliable for instance.
The article's position is more nuanced than that.
It starts with the premise that good (whatever that means) programmers are expensive.
It proceeds to observation that companies would outsource to cut costs. It also makes another observation that Indian and post-Soviet programmers are cheap.
This observation conflicts with their premise: "good" programmers are expensive; therefore cheap programmers are likely not "good".
Whether this has any bearing on reality can perhaps be tested probabilistically, by examining whether there exists a negative correlation between the amount of money asked for a project and the "unsatisfactory performance" — if one can define what that means). If such a correlation exists, it will make this statement not a statement of personal attitude ("racism"), but a statement of likelihood.
1. People don't have a good sense of their market worth. It's possible to convince/coerce someone to work for less than they're worth ("think of the exposure!", "we'll be big in 5 years") while other people have an inflated sense of their own worth.
2. All other things _aren't_ equal. Indian programmers cost less because of Purchasing Power Parity and relative wealth. For a person who's monthly expenses are $400-500, getting a salary of $3k a month is a sweet deal. Plus A salary of $3k per month would put you comfortably in the top 0.5% of Indian society, able to afford most luxuries.
> Now, competitors in India, the former Soviet bloc, and elsewhere can just as easily use the same tools and techniques at lower cost.
The author implicitly generalizes that all Indian and post-Soviet programmers are cheap and all cheap programmers are Indian/post-Soviet.
Respectfully, the generalization that includes the word ALL happens in the mind of the reader. The authors CANNOT have meant that all cheap programmers are Indian/post-Soviet. Indeed, in the previous paragraph the author talks about "barely-out-of-high-school whiz kids", whom he also doesn't hold in high esteem; and those kids are likely imagined as American.
The claim that the original text makes is probabilistic. It may even turn out to be true (as in, it is not unimaginable that it's more likely than not to get bad programmers on the project when outsourcing to cheap companies in e.g. India or post-Soviet countries).
Besides that, bringing in nationalities was completely useless. The author had already established that low cost contractors yield bad results, so why tie that to nationalities needlessly? It adds nothing to the text except for a slightly racist undertone and a bash on engineers of these nationalities.
That is a racist sentiment, leading to a racist system which is self-reinforcing. It means fantastic devs have to deal with low pay or leave their families and homeland to get paid their worth, it means mediocre devs who were lucky enough to be born in Palo Alto have a much easier ride.
There was a time when people wouldn't give women important jobs because the mainstream view was that they would perform unsatisfactory performance. Now I think we can all say that's sexist nonsense. I think this idea is in a similar vein.
I think it would be great if people working in software developed a set of principles to adhere to while practicing the trade, but I believe it should be done in a way that is decoupled from the market forces of the capitalist economy. Something like a union would be a good approach.
I"m surprised you're getting so few responses with regard to this point.
Recently, I've changed up my heuristics for job seeking in light of a realization that many businesses out there aren't seeking to solve problems first and foremost; rather they are using technology to monetize solutions to previously solved problems that were not effectively monetizeable.
Creating middle-men seems to be the tech industry's favorite goal now. For the longest time, I found myself getting torn up by my conscience over what I was helping to build until I finally accepted what I was doing was no longer consistent with my moral compass.
Do no harm. Don't build things that can trivially facilitate violations of human rights. Don't build mass surveillance systems. Don't contribute to projects utilizing UX "dark patterns". Don't build things that intentionally target certain demographics for more effective financial extraction. Don't build that which is being sold as a solution to something it isn't, and for the love of little green apples, spare a second-thought when something comes to you that another person refused to code/accept.
There are plenty of good programmers of Indian ethnicity. But regardless of ethnicity, noone who is any good works in outsourcing.
Google maintains a large array of line-of-business apps. You probably have one open in another tab right now. Email, calendar, others. In these cases, the software (or software as a service) is the product, it's just not a direct-to-consumer product.
https://www.payscale.com/research/US/Job=Software_Developer/... https://fred.stlouisfed.org/series/MEPAINUSA672N
Too often on HN we focus on and glamourize the flashy Silicon Valley jobs and we think this is what our industry looks like. It doesn't. The Google, Facebook, and Amazon of the world are the 95th-99th percentile jobs, the very top of our industry in terms of salary and prestige. They do not represent the typical software developer.
The difference is that they're several times more expensive than the "bottom of the barrel" cheapest coders you can find in their country, while still being a bargain by US standards. Meanwhile I've worked with lowest-bid, US-based contractors in the past, and their work has been reliably bad.
So I'd put forward that the tendency to "cheap out" is the culprit behind poor quality, rather than outsourcing. Practically, the two often go hand-in-hand since the cheapest developers are often abroad, but the two needn't be conflated, and recognizing the nuance opens up the door to working with a high-quality, international pool of talent.
The point is to do no harm to your fellow employees. It's already obvious that a sign directing cars to drive off a pier isn't morally ok. Comments, names, and code structures which mislead and misdirect are also wrong.
If someone discovered a finely crafted historical artifact, and not understanding its beauty and significance, proceeded to cut it apart for scrap, many people would think that "a damn shame" and some would even think that morally wrong.
Also, suggesting that someone from outside the US is more likely to give you unsatisfactory performance is simply racist.
If the cause is held to be race, then it is racist, trivially speaking. However, the underlying (first principles) causation is driven by incentives. For example, I've worked in places where the outgoing FTP ports were wide open, and where I knew that someone, somewhere would pay hundreds of thousands of dollars, if not millions, for exfiltrated data. No way in hell would I or my coworkers ever have done that, because we knew that large corporations and governments would be likely to figure out what happened, and would be after us for years or decades until we were dead or caught. The above incentive structure changes a lot, if you know that a sovereign government is willing to give you cover.
At a less extreme level, outsourcing companies are often staffed by novices who are just looking to get promoted or change to a higher paying job somewhere else. The incentives are still misaligned.
The primary purpose of the code we write is/should be to serve a function. Being legible to others is a secondary aspect. If the function the code is supposed to fulfill is immoral, then I would really prefer it to (a) not work properly, (b) be misleading, (c) have crappy documentation, (d) build only during a full moon when you hold a beer bottle in a horizontal position above your monitor while standing on one leg.
In terms of cost/benefit, the cost of the programmer time in debugging far outweighs the cost of executing the code.
If the function the code is supposed to fulfill is immoral
Two wrongs don't make a right. Whistleblowing is to be preferred to sabotage.
And remember that it's an article about a hypothetical hippocratic oath for software developers we are talking about. Imagine if the oath doctors took was about being nice to other doctors and not obligations to the patients.
And whistleblowing will get you nowhere when everybody knows everything, it's just the way our economy is built that makes these "evil companies" flourish. It's worth remembering that you have a (limited) choice when looking for a job. I for one would be very happy writing software for the operation of trains or something similar. This is quite useful. Going to work for a company selling financial services I pretty much have a guarantee of harming people or not contributing to anything in any way at best.
Isn't that cheating? Isn't that betraying trust?
Going to work for a company selling financial services I pretty much have a guarantee of harming people or not contributing to anything in any way at best.
I think one should distrust these sorts of absolute condemnations of entire industries. Can you substantiate what you just wrote? Can you provide ironclad proof that all financial services companies are "evil?"
In my opinion, the notion that, "Evil is okay to perform, so long as it's against those I don't like," is a sign that someone, somewhere doesn't understand principles and the concept of "evil."
Of course.
> I think one should distrust these sorts of absolute condemnations of entire industries. Can you substantiate what you just wrote? Can you provide ironclad proof that all financial services companies are "evil?"
It suffices to say that it is in the best interest of these companies to fool the people when they operate under current economic system. 2008 is one such example. Goldman Sachs owners getting rich, just the customers getting screwed is an extreme-case example. "Proof"? "All financial services"? Now you sound as if you expected me to produce a mathematical proof. I'm just talking about what the reasonable expectations are when considering different job offers. In today's startup-fueled climate I can phrase this way: a startup finds a solution to a problem noone knew they had, it spends time marketing it, ... Oh, back to the beginning: startup announces that it found a solution to a problem. Now they don't actually have any working code. They struggle to make a PoC for months, after that another PoC, ... Nothing actually does anything, just suffices to produce the illusion that something is being done and that something will eventually do something. All this just to keep the ball of fundraising rolling. The investors know it's all bullshit, but it's all not about getting a product in the end. It's about speculating what the next big thing will be. But it's all unimportant. Just keep the appearances and keep the money flowing. But don't fool yourself that any regular guy will benefit from what you're doing. For me it's depressing. But there are a lot of software developers who are just fine with it for the sake of a high salary.
> In my opinion, the notion that, "Evil is okay to perform, so long as it's against those I don't like," is a sign that someone, somewhere doesn't understand principles and the concept of "evil."
Classifying things unambiguously into "good" and "evil" may be unproductive. It's all a matter of context. I'd say that when your superior/boss requests you to harm others, you don't owe them obedience. Disobedience, cheating etc. aren't inherently "evil".
At least produce something that attempts to sound like a cogent theory, like the Marxists. (Though Karl Marx explicitly invents his own form of "logic" to do so.) Seems like you just don't like certain kinds of people, based on your prejudices about certain industries.
I'd say that when your superior/boss requests you to harm others, you don't owe them obedience.
I'd say that when some "activist" requests you to harm others, they aren't on the side of justice.
Disobedience, cheating etc. aren't inherently "evil".
Against someone who isn't intentionally doing you harm? That sounds pretty evil to me. Of course, the world's very worst evils consist of convincing one's own side the other is "evil" by redefining what that means, thereby justifying the other's harm.
More like based on my own first-hand experience with these people.
> I'd say that when some "activist" requests you to harm others, they aren't on the side of justice.
The question is: is it better to manipulate regular people/harm them in other ways or stop giving your best to make working with your code a pleasure.
> Against someone who isn't intentionally doing you harm? That sounds pretty evil to me. Of course, the world's very worst evils consist of convincing one's own side the other is "evil" by redefining what that means, thereby justifying the other's harm.
Now you are labeling disobedience as evil, regardless of what this disobedience is in response to? Do you think that your employer has the right to ask you to do just about anything without any regard for the consequences of your actions?
I feel like we are pointlessly going in circles here. To be honest, I think that a much better choice is just resigning from the job (which I did recently) when you are uncomfortable with it. All these other things are secondary.
More like based on my own first-hand experience with these people.
This is a verbal pattern used by bigots throughout history, including those who have bashed me personally on the basis of race and sexuality. What's your p-value based on your sample size?
Now you are labeling disobedience as evil, regardless of what this disobedience is in response to?
The ends don't justify the means. You seem to be pushing a notion, that sufficient evil justifies evil in turn.
I feel like we are pointlessly going in circles here.
No. I think 3rd party readers will learn something.
To be honest, I think that a much better choice is just resigning from the job
Agreed.
I haven't evaluated it scientifically. My description of the lifecycle of a startup is a result of my observations made working at such a startup. These observations are consistent with what I read around on the web.
> The ends don't justify the means. You seem to be pushing a notion, that sufficient evil justifies evil in turn.
No. I don't see disobedience as an evil that needs to be justified to be committed. I think that evaluating when things are evil has to be postponed until after evaluating the context. Without the context applying the word "evil" is nonsensical. In a particular case its context may imply that obedience will lead to your boss making more money and making it faster at the cost of harming regular people. Disobedience in form of e.g. suboptimal performance at work may delay the product, make your boss angry, your colleagues slightly irritated with your code (but still I bet there is nothing you can write in a short time which will frustrate them more than a decade-old legacy code everybody is scared to touch) with the benefit of lowering the cost to regular people. No I understand a boss would be very pleased with their employees fulfilling their every wish, but it doesn't make it the right thing to do. You may also not be in a position to risk your job. And perhaps the benefit to society gained by sabotage is abysmal and doesn't justify its cost. But it's all in the context. I would be very suspicious of any ethics system which said you should be obedient at all times, or even encouraged you to be obedient by default. Humans should have their conscience.
It's either true, or it's false. Now, the motives behind saying or believing such a statement may be racist, but telling people who believe it that they are racist isn't going to change their minds.
All the more reason to push for some form of professional ethics!
The history of the hippocratic oath shows that despite its age, it didn't really become popular in medicine until 1000 years after it was written. Seems reasonably likely there was quite a lot of mental gymnastics in the medical profession, arguing against an oath.
I don't know how to fix this though.
This is the main problem of us. We perceive money and short-term goals (self) over of anything else. To fix the lack of personal responsibility in broader part of ecosystem is crucial.
Therefore, sort of Hippocratic Oath for software and hardware developers/managers and education to behave in moral constraints is important. We are playing bigger role in shaping how future on Earth(and other planets) will looks like. So it will be beneficial and important to signup for ethical codex.
I am surprised that we are not already doing it - globally. How come? How is that possible?
Why we have such things as Bar Association for lawyers?
Statements are important - at least you have to fight with your inner feeling that "you lied" to all when it actual status quo its just "matter of perspective" bending morals
I think the article really clashes with our everyday life. If there are devs for instance which think they have a shitty paid job and are bombarded with projects and tasks, I don't blame them for doing low quality work. Because there are companies that exactly want that. Because it's cheaper.
And remember kids, cheaper is aaaalways better! ...
Ensuring that people are rewarded for contributing to the social good and penalized for harming it would be a good start. While I am hesitant to suggest that money is the solution, paying enough for a modest standard of living would be nice. For those who are typically paid enough, such as teachers and nurses, ensuring that they are not exploited for their compassion would be a good start.
For those who have ambitions for wealth and status, rewarding meaningful contributions and penalizing harmful ones would be a start. Look at the early days of computers and communications technologies. People got rich and empires were built, yet positive contributions to society were made. The later stages of any given industry, which IT is likely in today, seems to be dominated by the consolidation of wealth and power. That does more to steal away from society than anything else.
As for the ones stuck in the middle, the ones who simply want to "do no harm", compensate them properly and give them the authority to act when they see harm. Adjust the tax system so that it encourages wealth to trickle down rather than up. Protect labor in meaningful ways when they speak out about injustices or incentives to do wrong.
Yes, none of these suggestions are concrete. Some of them may not even work. Yet there are plenty of approaches that should be considered before resigning to hopelessness.
And our definitions of harm can greatly differ, to the point where two groups honestly believe the other group is doing harm. While some of these cases can be resolved with more knowledge, some of them depend upon ethical guidelines that are entirely subjective.
Personally I would never swear to such a ridiculous contract.
https://techcrunch.com/2018/03/14/a-hippocratic-oath-for-art...
I think something of the like is definitely needed for software in critical domains.
Structural Engineers have to be chartered, right? Software engineers in certain domains should probably be chartered under the exact same conditions. But how would you define who should, and who shouldn't be chartered?
It isn't required however. Most of the focus was put on the process being followed (DO178B, IEC 61508, or their equivalents which I've now forgotton) rather than the compentence of specific individuals. It's more of an organisational view of competance rather than focusing on individuals.
"First, do no harm" wasn't included in the original oath. Whereas, "give no deadly medicine to any one if asked" is.
I think it's reasonable as a metaphor, but possibly not as an actual guide. Every profession could use an ethical code and statement made by each practitioner, not least of which is an explicit anti-fraud statement. Boy wouldn't that give a lot of people in marketing some difficulty?
There's a societal expectation that everyone provide for their family. If you're doing so through evil means (selling drugs, joining the mafia, sweeping floors as part of a genocidal political movement...) then you're in the moral wrong. But if you're sweeping floors for Goldman Sachs, no one could reasonably blame you for causing the financial crisis. Your contribution to an organization that falls somewhere juuuuust south of neutral is morally justifiable because you've gotta pay the bills.
But if you're the kind of developer we're talking about here, your ability to provide for your family is largely taken care of. Your decision to support an organization is no longer rooted in this socially-acceptable "gotta pay the bills" mentality, and instead about providing luxuries. That's also fine, but you now have to reckon with the fact that your contributions aren't in pursuit of helping pay the bills, and internally grapple with the morality of sending your kids to private school vs using your specialized, valuable skills to help modernize your neighborhood community center's tech stack (but at a much lower salary).
All people need to grapple with the tension between individual/family-level selfishness and societal well-being. But the relieved, privileged life that higher salaries afford also comes with an added moral obligation to evaluate how we spend our time.
Something something spiderman great power great responsibilities.
Like I said, not killing people is so behind the times :D
Of course, perhaps there is a bit of concern people may have when the person holding their life in their hands no longer takes an oath to preserve it, but what did the ancients know?
Anyway, it's fun as a thinking exercise, but I wouldn't live by it.
"I will not use the knife, not even, verily, on sufferers from stone"
Pre-antibiotics and pre-clinical trials that wasn't as unreasonable a position as it would be now. Of course some European medical workers did perform surgeries, just lower class ones who didn't take an oath.
I've stopped thinking of doctors as friends, and instead as salespeople preying on people in their most vulnerable state. That oath is just another ruse in the sales process.
Same, I basically consider a doctor an adversary until they give me reason to believe otherwise. Probably some of the ones who pass that filter are adversaries, still, and are making me pay for crap I shouldn't need to or directing me to providers who are more expensive to get kickbacks or whatever, they're just better at hiding it.
They are, as a profession, failing hard at upholding their oath. The insurance industry may be a uniquely useless part of providing medical care, but they do not deserve all the blame for the massive harm that's being done. Hospitals and doctors are a huge part of it, too.
[EDIT] I guess I think of them like mechanics now, actually, in that I figure any time I follow their advice and it causes me to give them money there's about an even chance I'm their mark, not their customer/patient.