A theory of software production