Principles and Practices in Software Engineering