As part of my degree coursework back in 2002, I had to write a whitepaper that outlined the commonsense principles behind ethical conduct within the sphere of IT, as affairs stood at that time. A recent conversation I had about the ethical conduct of software engineers prompted me to revisit that old paper, and try to extend the principles that I had outlined in it, to address the ethical issues that may arise when developing software applications. I’d like to highlight the underlying principles that ought to govern the good conduct of software engineers, for the benefit of newbies to this noble profession.
Whilst some folks might put forward issues such as violation of privacy, infringement of ownership rights or plain malicious intent (such as developing viruses) on top of their list of ethical concerns facing software developers, I’d like to begin with the issue of professional integrity as a developer. Basically, a software developer must be committed to building a safe, useful, reliable and secure piece of software. This means that one must:
- Not build malware unless it is for the explicit purpose of testing the security of an application in a controlled environment
- Have a rational use case for the application being developed; it must not be a piece of junk
- Test the software thoroughly and be committed to fixing defects in it
- Ensure to the best of one’s ability, that any information stored within the application should available only to those who are authorized to view it, as per the business use case
- Learn and follow recognized engineering practices in the industry, with respect to the architecture, design, coding, testing and distribution of the software. In other words, one must be a craftsman and not a hacker
- Be confident that the application’s business use case doesn’t violate any law of the land, civil or criminal. Building a piece of software that facilitates a Ponzi scheme would be an example of unethical conduct
- Report to the client or the employer promptly if in one’s opinion, a project is likely to fail, to prove too expensive, to violate intellectual property law, or otherwise to be problematic
A developer who fails to adopt the above guiding principles into his code of conduct would end up being “unprofessional” by today’s standards.
Let us now consider the issue of respecting the intellectual property rights of others. The parameters of this issue have been debated for many years, sometimes with winning arguments emerging from the flipside such as students in developing countries being unable to afford software development tools due to the absence of pricing structures catering to their poor economic conditions. However this conflict seems largely behind us now because big companies building popular propriety development tools (such as Microsoft) have created special pricing mechanisms to address the issue of global affordability and affordability for students. Also the vast open source development movement sprang about to address this very problem; and today we can say that, at least in principle, any developer can choose a toolset for building powerful, robust applications at zero infrastructure cost. Therefore the ethical principles behind respect for IP rights become even more morally binding, such as:
- Acknowledging borrowed IP that is being used as subcomponents of your application. This is particularly true for some free or open source apps, frameworks or code snippets. The providers of such software usually state the requirements for acknowledgement of their IP rights
- Adhering to the detailed parameters of licensing agreements of all software at all times. We should not exploit loopholes that allow us to gain access to the working tools, and then exceed parameters that the provider has stipulated but which he is unable to control, such as limits on concurrent database access. The providers have presumably decided on a fair business model for the software tools they peddle based on their operating costs, so we must not cheat them
- Helping those who have helped us, such as submitting honest reviews about the software subcomponents we have leveraged. This again is particularly true for open source frameworks; actively participate in ironing out issues in them and campaign for their progress
- Having clear licensing agreements for all applications we develop, and ensuring they are read by users when they install or sign up for your product
Another interesting aspect to ethical conduct in software development is the fair management of projects, to cater to the best interest of all parties concerned; namely the client, the developer(s) and the organization that employs their services for profit. This issue is mainly present in service companies that employ large teams of software developers to build applications for clients rapidly. Some of the recognized fair management practices include:
- A pragmatic estimation of the effort involved and delivery schedule, and an honest communication of the same to the client
- Close collaboration between the client and the developers, and ensuring transparency on both sides such as technical difficulties or changes in user expectations
- Monitoring of the ongoing effort and correcting capacity inadequacies proactively. Whilst enterprise software development is sometimes tedious and may require overtime effort from developers, the long-term goal of a ethical project manager would be to match client expectations with available capacity, and ensure the developers enjoy a work-life balance
- Develop a firm opinion about the risks and issues arising in a development project, based on investigation and past experience, and take action to mitigate the problems at hand. In other words, an ethical project manager would have a “backbone” to make decisions and influence people
- Ensure that whilst team communication can be assertive or relaxed based on the situation at hand, it always remains professional and follows all norms of the communication decency
There are many other ethical issues that we may face as software engineers, please see below some interesting references that cover this topic more thoroughly.
When we set standards for a profession, we draw a line on the sand between the acceptable and the unacceptable, which sets the stage for greater respect and higher compensation. I invite you all to choose the higher standard.
References:
Computer Ethics Institute:http://computerethicsinstitute.org/
Communication Decency Act: http://en.wikipedia.org/wiki/Communications_Decency_Act
Software Engineering Code of Ethics and Professional Practice:
http://www.acm.org/about/se-code