Principles of Software Engineering, software development process and what constitutes well engineered software, software specification and  requirements definition