How good is good enough?: an ethical analysis of software construction and use