This course discusses essential topics in Software Engineering and predominantly examines methods and techniques practiced in the industry, without taking an evangelical position on any of these approaches. The course reflects software engineering process models and underlines the increase of modern Software Engineering methods and techniques particularly the use of SCRUM and distributed version control tools such as Git. Requirements Engineering, System Modelling and Architecture are critical subjects discussed in in great detail within the course. Last but not least, Legacy and dependable systems are examined alongside with Software Maintenance at the end of the course.