So I was listening to a recent Western Developer’s podcast on Ethics. At one point in the conversation [39:30] there was a call for establishing a industry standard professional body for software developers. This would be much like the Bar Association for lawyers or the Medical Board for doctors. It would be responsible for establishing a set of guidelines or rules for software development professionals to follow. It would grant membership to those properly trained and punish those that act unprofessionally. This is also a common theme from Uncle Bob [23:00].
Neither of these podcasts stated what that code of ethics should be or how we would go about forming this body. It would certainly be difficult to do. In my opinion this will never happen. I hold this opinion not because I think it is too difficult, but because I think we shouldn’t. I do believe we need to act professionally and we need to apply ethics to our jobs. However, I don’t think we could successfully build a governance body and have this widely accepted by our clients.
We are a service industry. We generally don’t serve individuals, like doctors serve patients. We serve industries. We write software for the health care, legal, engineering, or accounting industries. We usually specialize in serving a single industry. In my opinion software companies that specialize in a single industry are more successful at meeting their clients needs.
When specializing in servicing an industry you must become part of that industry. You must learn to talk like you clients. You must adopt their culture and behaviours.
For example let’s look at serving the health care industry. Doctors are bound by their medical board to save lives. That is their code of ethics. Although hospital administrators are not doctors and not ruled by the same medical board, due to their service to the industry they do follow many of the same core ethics. Hospital administrators work within fixed budgets to save as many lives as possible. Their actions save lives, the same as doctors save lives.
A hospital administrator could print flyers reminding people to wash their hands and this can save lives. The costs of this printing project could save more lives per dollar than keeping a surgical staff on call. So when an administrator needs to make a decision to print flyers or fund a surgical team they can apply their ethics to help them make this decision.
Now for a software example, let’s say a hospital administrator wants you to build a big design up front, 3 year waterfall project. You know because of your training and/or experience as a software development professional that this approach is likely to fail. It is a waste of money. A professional software developer would argue with the administrator that it is better to break the project down into smaller Agile projects.
When arguing with the hospital administrator as to the whether or not the waterfall project should be done, this argument must be framed in the context of the health care industry. The software developer should refuse to do the waterfall project. Not because their software professional organization states that waterfall is wrong. The reason should be because the waterfall project will not save as many lives compared to spending that same hospital budget on other potential projects.
We cannot superimpose ethics of the software development profession (or any other industry) on our client’s industry. If we cannot restate our ethics in the terminology of our client’s industry we will not be successful.
In the accounting industry there is a very strict audit trail. Every penny received from the sale of an item can be traced through to how that is redistributed to employee salaries, building maintenance costs, raw materials, vendors, taxes, and shareholders. An accountant would consider it unprofessional if they were not able to produce this audit trail.
However, other industries do not have as strict an audit trail. The agriculture and food industry generally cannot produce an audit trail to trace a loaf of bread back to the farmer’s field where the wheat was grown on. An accountant may look at that and claim it is unprofessional. The farmer and baker would reject their arguments. The accountant would not be able to argue the point purely on the professionalism of an audit trail. However, they might be more successful if they could reframe their argument as a food safety issue. Food safety is part of the ethics the farmer and baker are bound to. The agriculture industry does batch together food from multiple farms and verify the quality and safety of the batch, but they might never be able to trace grains of wheat as accurately as accountants track pennies.
Furthermore, to the agricultural professional one should not waste food or other resources. Tracking individual grains of wheat would certainly be seen by farmers and bakers as wasteful and therefore unprofessional. The same qualities that may make someone a professional in one industry could seem unprofessional if unconditionally applied in other industries.
Although we can and should train software developers to be professional and ethical, we cannot directly superimpose those standards on the industries we serve. Professional software developers must hold two degrees: one in software development and another in the domain and ethics of the industry they serve. If we cannot adapt our ethics to the terms of our clients (on a client by client basis) we risk being branded as unprofessional. This could, or perhaps has, lead to the software profession as a whole being labeled as immature.