Aristotle conceived of virtue as a balance between two extremes. For example, the virtue of generosity is defined as the correct balance between wastefulness and stinginess. Courage is a balance between confidence and fear. Phronesis, or practical wisdom, involves knowing how to apply the virtues in specific contexts. Phronesis and the virtues of character are connected in such a way that one cannot possess any developed virtues without possessing all the others. Therefore, there are not many distinct criteria for judging the virtue of an individual, but rather one complex measure.1

Software engineering is a series of trade-offs. Good engineering involves achieving the correct balance between various practices within specific contexts. Because software engineering is a human activity we can apply the philosophy of the golden mean to various aspects of the planning, production, and consumption of software products. Aristotle declares at the very beginning of the Nicomachean Ethics that all technical arts aim at some good. This aim may only be subordinate to a higher aim. There is one ultimate end which must be the supreme good. Software is not an end in itself but a means to achieving a higher good.

The most crucial question to ask about software is: what purpose does it serve? If its basic purpose is unjust in the sense that its aims are not virtuous then the best engineering choice would be not to produce it at all. This idea is summarized by Google’s “Don’t be evil” motto.

The next set of questions surround what are commonly termed “best practices”. Using this phrase begs the question. What is best? Not only does this hinge on the philosophical framework outlined above, it also involves psychological elements related to teamwork and communication. Take Test-Driven Development (TDD) for example. There is not enough consensus to establish TDD as a universal or even common practice. What an individual developer does is largely dependent on what the team does. One team member is unlikely to affect sweeping changes in an organization. However, the individual may find value in practicing TDD and may share that enthusiasm when appropriate. As long as the individual contributor maintains balance between extremes of courage (excessive fearlessness/lack of confidence) and possesses all other virtues, the golden mean is achieved and the developer is worthy of praise.

Software development is perhaps the most complex human undertaking. Despite being so crucial it is often trivialized by dismissing the ethical dimensions or the importance of phronesis.


  1. Alasdair MacIntyre, After Virtue: A Study in Moral Theory, 155 ↩︎