The course offers an introduction to the field of Software Engineering, highlighting the various software design, quality and management issues that occur during the development of large software projects, while presenting the current state of the art in addressing these issues. Specifically, the course covers software life-cycle phases and their management methodologies, focusing on (a) the agile methodology in general and Scrum in particular, (b) the DevOps methodology and specifically the issues underlying version control, build automation and test automation. The course also deals with software design and architecture, discussing analysis and modeling of requirements, object-oriented design and architectural patterns, emphasizing the architectural choices that arise from the CAP theorem. Finally, the course also presents the latest techniques used in the development of Web-based user interfaces.