← All writing
Software EngineeringEthics

The Code of Ethics Principle I Find Most Difficult to Follow

A reflection on the ACM/IEEE-CS Software Engineering Code of Ethics, the Product principle, and the difficulty of choosing thoroughness over a quick finish.

I recently went through the ACM/IEEE-CS Software Engineering Code of Ethics for a class discussion. The code is a series of eight principles that govern how software engineers should behave in ethical situations and how we can best represent the profession of software engineering.

Computers are now integral parts of nearly every industry. Because of this, they have the potential to do great good and great harm, or to enable others to do good or harm. The code exists to encourage software engineers to make decisions that do the most good, maintain the respect of the profession, and remain consistent with the public interest.

The eight principles cover the Public, Client and Employer, Product, Judgment, Management, Profession, Colleagues, and Self. Going through them, the one I found most challenging to follow consistently was Principle 3: Product.

The Product principle

The Product principle says that software engineers should ensure their products and related modifications meet the highest professional standards possible. I always strive for excellence in my work, but this principle becomes difficult when real engineering constraints enter the picture. Tight deadlines, technical bottlenecks, and project fatigue can create strong pressure to deliver a quick or incomplete solution just to mark a task as finished.

It can be difficult to know where to draw the line. There is always another test that could be run, another edge case that could be checked, or another part of the system that could be improved. At the same time, a product eventually has to be delivered. Following this principle requires me to judge whether I am making a reasonable engineering trade-off or simply accepting work that I know is not ready.

Where this became real for me

I encountered this exact tension during a recent project involving outdoor environmental sensors. I faced considerable difficulty validating the continuous data stream coming from the hardware array. Reaching an acceptable baseline required iterative calibration and recalibration. At several points, the complexity of the debugging process tempted me to proceed with unrefined data simply to move the project forward, even though I knew further improvements were necessary to meet rigorous data-quality standards.

Ultimately, personal integrity and professional discipline guided me through the painstaking validation process. Taking the time to properly clean and calibrate the input ensured that the later analysis produced trustworthy and reliable results. It also meant that the work genuinely aligned with the professional standards and public interest described in the code.

Choosing reliability over convenience

Consistently maintaining the highest possible quality is demanding, especially when trade-offs between speed and thoroughness arise. That is what makes the Product principle the most difficult one for me. It is not difficult because I disagree with it. It is difficult because following it requires patience when I am tired, honesty when a result is not ready, and the discipline to keep working when a quick finish would be more convenient.

Reviewing the code reinforced something I have experienced as an engineer: long-term reliability and integrity have to take priority over short-term convenience. A finished task is not useful if the people who depend on it cannot trust the product or the data behind it.