I am a CS major, currently enrolled (about to finish) in a Software Engineering (II) course. My teacher told us at the beginning of the the first course (SE I) that the main objective of the class is to develop real world systems, as such she asked us to search for an NGO who was in need of an information system and go develop it for them during the length of the course. It is supposed that it is a way for the university to socially project itself (and supposedly us). To be fair to her it was assigned as a group activity but I decided to work by myself.

I went to an NGO and asked if they were in need of a system and told me that they were, but that if I were to develop anything for them I couldn't just go and install it, I would merely be presenting it to the local authorities and they decided it was good they would propose it to a higher authorities. So the implementation of the system was (obviously) not guaranteed, and that was a requirement (the system must be implemented).

My teacher said she wouldn't consider any systems that were not guaranteed to be implemented. I feel that is an overstretch considering we were (are) not certified professionals (yet), and the NGOs were not asking for the software. Other majors are (for the most part) not required to participate in real world activities (e.g. a civil engineering major is not required to go look for a real world construction and WORK on it, to ask for some information maybe, but not to go do actual real work).

To be clear this was not a research assignment, she asked us to look for a real world system that needed to be developed and just go do it.

The justification for this is that we would gain experience by doing it (both in systems analysis and working in teams) but she never really taught us any of that (no git, no unit testing, no UI testing, no integration tests, no nothing). To emphasize how she didn't even teach us how to work in groups: I told her that I had created a repository to host my project and show all the changes that occur, and suggested her to tell the others (who were working in groups) to do the same and make sharing code easier and she basically told me that passing the projects around in flash drives and making full copies of the different versions was a better way to do things.

The few lectures we had were about types of software and software lifecycle without which were really shallow in nature (merely definitions of concepts).

She would ask us to show her our progress weekly, and she didn't care of under the hood changes, if it was not visible on screen, she would say we had done nothing (with is something she even taught us: changes are not always visible).

In the end everyone had a horrible time with that class (specially me as I was working by myself) and had to relive it for the next class. I saw how my classmates were doing disastrous jobs with their software (dbs with no passwords, no sanitizing SQL queries, every client was making a direct connection to the dbs instead of through an API, etc...) and she really didn't care at all, indeed she suggested some of those things, she really just cared about the UI looking nice.

So the question is: Is it ethical for this teacher to require us to go work (unsupervised) on an unsolicited real world system (which was not backed, required nor supervised by university authorities), without being paid for it, and requiring that whoever accepted our work would have to guarantee that they would implement our software, and if they didn't we would fail the course?

I think it is unethical, and a potential legal problem for her, the university and us the students, given the high potential of these systems malfunctioning or being insecure, considering these are sort of high profile organizations. But still I want to hear what is the general opinion on this matter and could I do about it.

BTW since we had so few lectures we didn't even had a final test, instead we would have to prove that our systems were implemented to pass.

  • 2
    Your teacher can demand that you implement something. Your teacher may desire that the NGO were impressed by your implementation. (The teacher cannot insist that the NGO provides the teacher with their impression, so the teacher can only use such information if it is provided.) Your teacher cannot expect any NGO to deploy your implementation. Are you sure you have correctly distinguished between implementation and deployment? The terms seems to be confused in the phrasing of your question. E.g., "the implementation of the system was (obviously) not guaranteed."
    – user2768
    Dec 6, 2017 at 8:26
  • 5
    "[My teacher] basically told me that passing [source code] around in flash drives and making full copies of the different versions was a better way to do things [compared to using a repository]." That's abysmal.
    – user2768
    Dec 6, 2017 at 8:30
  • @user2768 Well implementation is the actual word used in class, maybe this is due to language (Spanish speaker). But what I mean by it is the NGO going ahead, installing the software and actually use it. To be fair she recognizes that they might not use it after we are done with it, but she insists we must have permission to install things and provide proof we did.
    – lsauceda
    Dec 6, 2017 at 12:42
  • 4
    passing the projects around in flash drives and making full copies of the different versions was a better way to do things — Oh, god. Can you drop the class and take it from someone else? Or can you just hold your nose long enough to get through this farce and get out?
    – JeffE
    Dec 6, 2017 at 16:30
  • 1
    To me, none of this seems unethical. Just terrible. And nigh-infeasible. And legally risky (based on the security problems in the theoretically deployed code). Dec 6, 2017 at 18:17

2 Answers 2


Implementation is ethical. It is ethical for your teacher to require implementation of a system for real-world deployment. Albeit, it would be better if the word prototype were included.

Deployment is unethical. It is unethical for your teacher to claim that any such implementation is suitable for deployment.

Side note. Your teacher cannot expect any NGO to deploy implementations.

Additional remark. It is abysmal to teach students that "passing [source code] around in flash drives and making full copies of the different versions was a better way to do things [compared to using a repository]."


First of all, a part of your complaint about having a horrible time, the teacher not caring about under the hood changes etc, suggests to me an instructor who is not very competent. That sucks and I sympathize with you for having an incompetent teacher, but incompetence is not unethical. That is, someone just making mistakes or being bad at their job does not mean they are an unethical person. It’s bad in its own way of course, but those are two different things.

Now, the part of your complaint where I see a potential ethical issue is where the instructor is requiring you to deploy the software you developed at a real-life NGO. It sounds like she is overstepping her authority here in a serious way, which raises ethical and potentially legal issues. She is:

  • asking you to allow the fruit of your labor to be used by others, with no compensation to you and disregarding your ownership of rights to the work;
  • asking you to bear the potential legal liability to yourself from others using your work;
  • asking an NGO to use unvetted code developed by an inexperienced programmer, with potentially bad consequences for them;
  • putting you in an awkward situation of having to go around begging NGOs to use your work (or pretend to be willing to use it), wasting precious time building up a “skill” that has nothing to do with software development;
  • making you do all of those things under coercion since you need to comply in order to receive a passing grade in the class.

I am not a lawyer so I cannot comment on the legal issues, but from an ethical point of view I have serious concerns. I can’t say it’s unquestionably unethical since that depends on the local laws and culture in your country and university, but at the very least you might want to bring the issue to the attention of people at your university, eg, an adviser or department chair, and ask for reassurance as to whether the instructor has authority to act as she is. In the United States, I am quite confident there would be numerous reasons why such conduct would not be permitted. Good luck!

  • asking an NGO to use unvetted code developed by an inexperienced programmer, with potentially bad consequences for them -- As far as this item goes, my take is that the instructor is not acting unethically; the NGO would be acting in an unethical manner if they decided to use / deploy unvetted code, but the instructor is not responsible for this action.
    – Mad Jack
    Dec 6, 2017 at 19:12
  • @MadJack I agree but only partially - the NGO is responsible for its own actions obviously, but the instructor could he also responsible in a small way, to the extent that she is endorsing the deployment of low quality code by the NGO, and generally setting up a situation in which the NGO’s decision-makers (who may have no experience in software development, no way to judge the quality of the free service being offered to them, and may be strapped for cash and hence pressured to act in suboptimal ways) may be led to make a dangerous error of judgment.
    – Dan Romik
    Dec 6, 2017 at 19:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .