Building Software: A Practitioner's Guide