The task of developing large software systems is an immense intellectual effort.