Engineering Foundations for Software